簡體   English   中英

如何使用 java 8 將 8 位 RGBA png 圖像轉換為 16 bpc RGBA png 圖像?

[英]How to convert 8-bit RGBA png image to 16 bpc RGBA png image using java 8?

我使用了 BufferedImage class 從 pdf 生成圖像。 我通過使用下面提到的代碼片段獲得了 8 位 RGBA,但我無法將其轉換為 16 bpc RGBA。

int page = 0;
BufferedImage bim = new BufferedImage(100, 100, BufferedImage.TYPE_USHORT_565_RGB);
bim = pdfRenderer.renderImage(page);
String fileName = OUTPUT_DIR + "image-" + page + ".png";
ImageIOUtil.writeImage(bim, fileName, 1);

要為每個樣本(或通道)創建一個 16 位的BufferedImage並將其存儲為 PNG,您可以使用以下代碼:

ComponentColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_USHORT);
BufferedImage image = new BufferedImage(colorModel, colorModel.createCompatibleWritableRaster(100, 100), colorModel.isAlphaPremultiplied(), null);

if (!ImageIO.write(image, "PNG", new File("test.png"))) {
    System.err.println("Could not write PNG: " + image);
}

從代碼中,我假設您使用的是 PDFBox。 如果您使用的是 PDFBox,則可以使用ImageIOUtil.writeImage代替ImageIO.write 但是您可能希望將 DPI 設置為比1更合理的值...

另請注意,代碼中的image = pdfRenderer.renderImage(page)將替換圖像,因此您不能使用它。 嘗試改用renderPageToGraphics(int, Graphics2D)方法:

ComponentColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_USHORT);
BufferedImage image = new BufferedImage(colorModel, colorModel.createCompatibleWritableRaster(100, 100), colorModel.isAlphaPremultiplied(), null);

Graphics2D g = image.createGraphics();
try {
    pdfRenderer.renderPageToGraphics(page, g);
}
finally {
    g.dispose();
}

if (!ImageIOUtil.writeImage(image, test.png, 72))) {
    System.err.println("Could not write PNG: " + image);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM