Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HasaAlpha vs GetAlpha光栅_Java_Image_Awt - Fatal编程技术网

Java HasaAlpha vs GetAlpha光栅

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"));

在Java中,是否希望能够有一个
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。谢谢。这起作用了。不幸的是,我远不是图像格式和处理方面的专家。