Handle RGB15BE blit

This commit is contained in:
elasota
2021-09-02 04:13:43 -04:00
parent 376fdf16c4
commit 7e3569500a
3 changed files with 28 additions and 6 deletions

View File

@@ -624,7 +624,7 @@ void BMPDumperContext::BlitScanlineAndAdvance(const void *scanlineData)
outRowStart[i] = m_blitParams.m_colors[colorIndex];
}
break;
case PortabilityLayer::QDPictBlitSourceType_RGB15:
case PortabilityLayer::QDPictBlitSourceType_RGB15Native:
for (size_t i = 0; i < rowSize; i++)
{
const size_t originCol = i + firstSrcCol;
@@ -637,6 +637,20 @@ void BMPDumperContext::BlitScanlineAndAdvance(const void *scanlineData)
outputItem.a = 255;
}
break;
case PortabilityLayer::QDPictBlitSourceType_RGB15BE:
for (size_t i = 0; i < rowSize; i++)
{
const size_t originCol = i + firstSrcCol;
const uint8_t *itemBytes = (scanlineBytes + originCol * 2);
const uint16_t item = static_cast<uint16_t>((itemBytes[0] << 8) | itemBytes[1]);
PortabilityLayer::RGBAColor &outputItem = outRowStart[i];
outputItem.b = FiveToEight(item & 0x1f);
outputItem.g = FiveToEight((item >> 5) & 0x1f);
outputItem.r = FiveToEight((item >> 10) & 0x1f);
outputItem.a = 255;
}
break;
case PortabilityLayer::QDPictBlitSourceType_RGB24_Interleaved:
for (size_t i = 0; i < rowSize; i++)
{