private static void putcontig8bitYCbCr41tile(
TiffRgbaImage img, int[] raster, int rasterOffset, int rasterShift,
int x, int y, int width, int height, byte[] buffer, int offset, int bufferShift)
{
// XXX adjust bufferShift
do
{
x = width >> 2;
do
{
int Cb = buffer[offset + 4];
int Cr = buffer[offset + 5];
img.YCbCrtoRGB(out raster[rasterOffset + 0], buffer[offset + 0], Cb, Cr);
img.YCbCrtoRGB(out raster[rasterOffset + 1], buffer[offset + 1], Cb, Cr);
img.YCbCrtoRGB(out raster[rasterOffset + 2], buffer[offset + 2], Cb, Cr);
img.YCbCrtoRGB(out raster[rasterOffset + 3], buffer[offset + 3], Cb, Cr);
rasterOffset += 4;
offset += 6;
}
while (--x != 0);
if ((width & 3) != 0)
{
int Cb = buffer[offset + 4];
int Cr = buffer[offset + 5];
int xx = width & 3;
if (xx == 3)
img.YCbCrtoRGB(out raster[rasterOffset + 2], buffer[offset + 2], Cb, Cr);
if (xx == 3 || xx == 2)
img.YCbCrtoRGB(out raster[rasterOffset + 1], buffer[offset + 1], Cb, Cr);
if (xx == 3 || xx == 2 || xx == 1)
img.YCbCrtoRGB(out raster[rasterOffset + 0], buffer[offset + 0], Cb, Cr);
rasterOffset += xx;
offset += 6;
}
rasterOffset += rasterShift;
offset += bufferShift;
}
while (--height != 0);
}