Java HasaAlpha vs GetAlpha光栅
在Java中,是否希望能够有一个Java HasaAlpha vs GetAlpha光栅,java,image,awt,Java,Image,Awt,在Java中,是否希望能够有一个buffereImage,这样getColorModel().hasAlpha()将返回true,而getAlphaRaster()将返回null 我问这个问题是因为我正在使用一个库(尤其是在PDJpeg类中的PDFBox),它会破坏这样一个图像 在这种特殊情况下,我使用以下方法创建图像: BufferedImage bi = ImageIO.read(new FileInputStream("/Users/dan/Downloads/test.png"));
buffereImage
,这样getColorModel().hasAlpha()
将返回true,而getAlphaRaster()
将返回null
我问这个问题是因为我正在使用一个库(尤其是在PDJpeg
类中的PDFBox),它会破坏这样一个图像
在这种特殊情况下,我使用以下方法创建图像:
BufferedImage bi = ImageIO.read(new FileInputStream("/Users/dan/Downloads/test.png"));
我在这个问题下面附上了一张我不满意的图片
是否有某种参数可以传递给ImageIO,或者在加载后可以对我的BuffereImage
进行某种转换,这样它就不会遇到这个问题
我正在运行Java1.7.0(如果有必要的话)
堆栈跟踪的完整性:
java.lang.NullPointerException
at java.awt.image.ComponentColorModel.isCompatibleRaster(ComponentColorModel.java:2787)
at java.awt.image.BufferedImage.<init>(BufferedImage.java:629)
at org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.createImageStream(PDJpeg.java:159)
at org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.<init>(PDJpeg.java:133)
java.lang.NullPointerException
位于java.awt.image.ComponentColorModel.isCompatibleRaster(ComponentColorModel.java:2787)
位于java.awt.image.buffereImage。(buffereImage.java:629)
位于org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.createImageStream(PDJpeg.java:159)
位于org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg(PDJpeg.java:133)
是的。作为缔约国:
此方法假定,对于除IndexColorModel
以外的所有ColorModel
对象,如果ColorModel
支持alpha,则存在一个单独的alpha通道,该通道存储为图像数据的最后一个波段。如果图像使用的IndexColorModel
在查找表中包含alpha,则此方法返回null
,因为不存在空间上离散的alpha通道
您的图像是带有透明索引的调色板PNG。ImageIO将使用IndexColorModel
(即,没有离散的alpha通道)将其读入一个BuffereImage
通过创建相同大小的空白图像,获取其图形,并在其上绘制原始图像,可以将图像转换为不同的缓冲图像
类型(如类型\u INT\u RGB
):
BufferedImage origininal = ...;
BufferedImage copy = new BufferedImage(original.getWidth(), original.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = copy.createGraphics();
try {
g.drawImage(original, 0, 0, null);
}
finally {
g.dispose();
}
您也可以将图像类型作为
ImageReadParam
上的ImageTypeSpecifier
传递给ImageReader
。但是对于阅读部分,它需要更多的代码 它是如何失败的?堆栈跟踪在哪里?特定的堆栈跟踪在PDFBox内部,因此我认为它不适用,但具体来说,它是一个NullPointerException
异常,其根本原因是bi.getColorModel().hasAlpha()
返回true,但bi.getAlphaRaster()
返回null。谢谢。这起作用了。不幸的是,我远不是图像格式和处理方面的专家。