Added decoder for Atari Falcon 16-bit pixel format.

This commit is contained in:
2018-03-02 12:25:20 +00:00
parent c1e7636a7e
commit f6fc1491ec

View File

@@ -131,28 +131,47 @@ namespace libexeinfo
int[] pixels = PlaneToRasterIndexed(data, width, height, planes); int[] pixels = PlaneToRasterIndexed(data, width, height, planes);
int[] palette = null; int[] palette = null;
switch(planes) if(planes <= 8)
{ {
case 1: switch(planes)
palette = Palette1; {
break; case 1:
case 2: palette = Palette1;
palette = Palette2; break;
break; case 2:
case 3: palette = Palette2;
palette = Palette3; break;
break; case 3:
case 4: palette = Palette3;
palette = Palette4; break;
break; case 4:
case 8: palette = Palette4;
palette = Palette8; break;
break; case 8:
// What to do with other pixel formats? palette = Palette8;
default: return null; break;
} // What to do with other pixel formats?
default: return null;
}
for(int i = 0; i < pixels.Length; i++) pixels[i] = palette[pixels[i]]; for(int i = 0; i < pixels.Length; i++) pixels[i] = palette[pixels[i]];
}
// This is the Falcon030 pixel format: RRRRRGGG GGGBBBBB
else if(planes == 16)
{
int[] pixels2 = new int[pixels.Length];
for(int i = 0; i < pixels.Length; i++)
{
// Red, from 5 to 8 bit
pixels2[i] = (((pixels[i] >> 11) * 0xFF) / 0x1F) << 16;
// Green, from 6 to 8 bit
pixels2[i] = ((((pixels[i] >> 5) & 0x3F) * 0xFF) / 0x3F) << 8;
// Blue, from 5 to 8 bit
pixels2[i] += ((pixels[i] & 0x1F) * 0xFF) / 0x1F;
}
pixels = pixels2;
}
return pixels; return pixels;
} }