gpt4 book ai didi

java - DataBufferByte 无法转换为 DataBufferInt?

转载 作者:太空宇宙 更新时间:2023-11-04 07:15:36 26 4
gpt4 key购买 nike

我想将 RGB 值存储在像素数组中,如下所示:

pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();

其中图像是:

BufferedImage image = new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB);

我使用ImageIO读取该文件,它读起来很好,这部分就是问题所在。错误如下:

Exception in thread "main" java.lang.ClassCastException: java.awt.image.DataBufferByte cannot be cast to java.awt.image.DataBufferInt
at SpritePractice.render(SpritePractice.java:114)
at SpritePractice.run(SpritePractice.java:75)
at SpritePractice.start(SpritePractice.java:124)
at SpritePractice.main(SpritePractice.java:132)

像素是一个 int 数组,如下所示:int[] Pixels
我该怎么办?作为一个附带问题,有人可以解释一下类型转换及其作用吗?谢谢!

编辑:

在控制台上打印出image.getRaster().getDataBuffer()

输出如下:

java.awt.image.DataBufferByte@716925b0

显然这里有问题。我指定 BufferedImage image = new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB); 并且它正在读取 DataBufferByte...

最佳答案

你可能做错了。 :-)

BufferedImage image = new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB);

...应该使用 IntegerInterleavedRasterDataBufferInt 创建一个图像(它在 OS X 上为我做,使用我安装的所有 Java 6 和 7 JRE)。尝试在创建后立即打印光栅和数据缓冲区。我确信它会打印出您最初期望的内容。

推测性答案如下:

您还没有发布代码的相关部分,但根据评论,我猜测您是 a) 创建一个空图像并将其分配给 image,然后 b) 使用 ImageIO 读取另一个图像并将结果分配给 image,替换 image 的先前值。图像现在有一个光栅和字节类型的数据缓冲区。然后你尝试转换为 int 类型,然后繁荣。

现在,可以将 ImageIO 读入预先创建的 BufferedImage,或者仅指定类型。但这是特定于插件和源的(即:不能保证它会支持TYPE_INT_RGB)。要查询阅读器支持哪些图像布局,请执行以下操作:

ImageInputStream stream = ...;
Iterator<ImageReader> readers = ImageIO.getImageReaders(stream);
if (readers.hasNext()) {
ImageReader reader = readers.next();

try {
reader.setInput(stream);

ImageReadParam param = reader.getDefaultReadParam();

Iterator<ImageTypeSpecifier> specs = reader.getImageTypes();

while (specs.hasNext()) {
ImageTypeSpecifier spec = specs.next();

if (/*spec is for TYPE_INT_RGB*/) {
// Either pass your pre-allocated image:
reader.setDestination(image);

// *OR* simply tell the reader what type you like the result to be:
reader.setDestinationType(spec);
}
}

// TODO: Handle the case where there's no match among the ImageTypeSpecifiers

// In case image was passed, it will be the same image returned here
image = reader.read(0, param);
}
finally {
reader.dispose();
}
}

选角一如既往,但我认为这不是你的问题。 ;-)

关于java - DataBufferByte 无法转换为 DataBufferInt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20022612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com