private static void putcontig8bitYCbCr22tile(
TiffRgbaImage img, int[] raster, int rasterOffset, int rasterShift,
int x, int y, int width, int height, byte[] buffer, int offset, int bufferShift)
{
bufferShift = (bufferShift / 2) * 6;
int rasterOffset2 = rasterOffset + width + rasterShift;
while (height >= 2)
{
x = width;
while (x >= 2)
{
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[rasterOffset2 + 0], buffer[offset + 2], Cb, Cr);
img.YCbCrtoRGB(out raster[rasterOffset2 + 1], buffer[offset + 3], Cb, Cr);
rasterOffset += 2;
rasterOffset2 += 2;
offset += 6;
x -= 2;
}
if (x == 1)
{
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[rasterOffset2 + 0], buffer[offset + 2], Cb, Cr);
rasterOffset++;
rasterOffset2++;
offset += 6;
}
rasterOffset += rasterShift * 2 + width;
rasterOffset2 += rasterShift * 2 + width;
offset += bufferShift;
height -= 2;
}
if (height == 1)
{
x = width;
while (x >= 2)
{
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);
rasterOffset += 2;
rasterOffset2 += 2;
offset += 6;
x -= 2;
}
if (x == 1)
{
int Cb = buffer[offset + 4];
int Cr = buffer[offset + 5];
img.YCbCrtoRGB(out raster[rasterOffset + 0], buffer[offset + 0], Cb, Cr);
}
}
}