in src/main/java/org/apache/xmlgraphics/ps/ImageEncodingHelper.java [141:191]
public static void encodeRenderedImageAsRGB(RenderedImage image, OutputStream out,
boolean outputbw, boolean bwinvert) throws IOException {
Raster raster = getRaster(image);
Object data;
int nbands = raster.getNumBands();
int dataType = raster.getDataBuffer().getDataType();
switch (dataType) {
case DataBuffer.TYPE_BYTE:
data = new byte[nbands];
break;
case DataBuffer.TYPE_USHORT:
data = null;
break;
case DataBuffer.TYPE_INT:
data = new int[nbands];
break;
case DataBuffer.TYPE_FLOAT:
data = new float[nbands];
break;
case DataBuffer.TYPE_DOUBLE:
data = new double[nbands];
break;
default:
throw new IllegalArgumentException("Unknown data buffer type: " + dataType);
}
ColorModel colorModel = image.getColorModel();
int w = image.getWidth();
int h = image.getHeight();
int numDataElements = 3;
if (colorModel.getPixelSize() == 1 && outputbw) {
numDataElements = 1;
}
byte[] buf = new byte[w * numDataElements];
for (int y = 0; y < h; y++) {
int idx = -1;
for (int x = 0; x < w; x++) {
int rgb = colorModel.getRGB(raster.getDataElements(x, y, data));
if (numDataElements > 1) {
buf[++idx] = (byte)(rgb >> 16);
buf[++idx] = (byte)(rgb >> 8);
} else if (bwinvert && rgb == -1) {
rgb = 1;
}
buf[++idx] = (byte)(rgb);
}
out.write(buf);
}
}