}
}
public static DefineImage createDefineBitsLossless(int[] pixels, int width, int height) throws IOException
{
DefineBitsLossless2Tag defineBitsLossless = new DefineBitsLossless2Tag();
defineBitsLossless.setBitmapFormat(DefineBitsLosslessTag.BF_24BIT_RGB_IMAGE);
defineBitsLossless.setBitmapWidth(width);
defineBitsLossless.setBitmapHeight(height);
byte data[] = new byte[pixels.length * 4];
for (int i = 0; i < pixels.length; i++)
{
int offset = i * 4;
int alpha = (pixels[i] >> 24) & 0xFF;
data[offset] = (byte)alpha;
// Premultiply the alpha channel
if (data[offset] != 0)
{
int red = (pixels[i] >> 16) & 0xFF;
data[offset + 1] = (byte)((red * alpha) / 255);
int green = (pixels[i] >> 8) & 0xFF;
data[offset + 2] = (byte)((green * alpha) / 255);
int blue = pixels[i] & 0xFF;
data[offset + 3] = (byte)((blue * alpha) / 255);
}
}
defineBitsLossless.setZlibBitmapData(JPEGTranscoder.deflate(data));
return new DefineImage(defineBitsLossless, width, height);
}