in src/java/org/apache/fop/render/pdf/pdfbox/PSPDFGraphics2D.java [294:352]
public boolean drawImage(Image img, int x1, int y1, ImageObserver observer) {
Color mask = null;
ColorModel cm = ((BufferedImage)img).getColorModel();
if (cm.hasAlpha()) {
mask = Color.WHITE;
}
if (gen instanceof PSDocumentHandler.FOPPSGenerator) {
PSDocumentHandler.FOPPSGenerator fopGen = (PSDocumentHandler.FOPPSGenerator)gen;
PSDocumentHandler handler = fopGen.getHandler();
if (handler.getPSUtil().isOptimizeResources()) {
try {
final int width = img.getWidth(observer);
final int height = img.getHeight(observer);
if (width == -1 || height == -1) {
return false;
}
BufferedImage buf = getImage(width, height, img, observer);
if (buf == null) {
return false;
}
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataBufferInt db = (DataBufferInt) buf.getRaster().getDataBuffer();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeInt(width);
dos.writeInt(height);
for (int i : db.getData()) {
dos.writeInt(i);
}
String format = DataBufferInt.class.getName();
int hash = Arrays.hashCode(bos.toByteArray());
URI uri = fopGen.getImages().get(hash);
if (uri == null) {
uri = new TempResourceURIGenerator("img" + hash + "." + format).generate();
fopGen.getImages().put(hash, uri);
BufferedOutputStream outputStream = fopGen.getTempStream(uri);
outputStream.write(bos.toByteArray());
outputStream.close();
}
PSResource form = handler.getFormForImage(uri.toASCIIString());
ImageInfo info = new ImageInfo(uri.toASCIIString(), "image/" + format);
ImageSize size = new ImageSize(width, height, handler.getUserAgent().getTargetResolution());
size.calcSizeFromPixels();
info.setSize(size);
float res = handler.getUserAgent().getSourceResolution() / 72;
Rectangle rect =
new Rectangle(0, 0, (int)(size.getWidthMpt() * res), (int)(size.getHeightMpt() * res));
gen.saveGraphicsState();
gen.concatMatrix(getTransform());
writeClip(getClip());
PSImageUtils.drawForm(form, info, rect, gen);
gen.restoreGraphicsState();
} catch (IOException e) {
throw new RuntimeException(e);
}
return true;
}
}
return super.drawImage(img, x1, y1, observer, mask);
}