英文:
Why ((DataBufferInt) image.getRaster().getDataBuffer()).getData() return the array which contains only 0's?
问题
你的代码和输出看起来没有明显的错误。你已经成功地读取了一张图像,并获得了像素数组。输出显示像素数组的前几个元素都是0,这可能是因为图片的内容导致的。如果图片的内容本身包含大量的黑色像素,那么这个输出就是正常的。要检查图像的内容,你可以尝试使用其他工具来查看图像的像素信息,以确认图像本身是否有问题。
此外,你提到文件正常,这也是一个好的迹象。只要你能够成功读取图像并获得像素数组,你的代码在这方面就没有问题。
如果你有更具体的问题或需要进一步的帮助,可以提出。
英文:
I have the next code:
BufferedImage image = null;
try {
BufferedImage img = ImageIO.read(new File("src/img.jpg"));
image = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB);
} catch (IOException e) {
System.out.println(e);
}
// get array of image
final int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
System.out.println(Arrays.toString(pixels));
And I get next output:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ... ]
What am I doing wrong?
P.S. And yes, everything is OK with my file. Because, when I run sout(image)
get something like that BufferedImage@6f7fd0e6: type = 2 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=ff000000 IntegerInterleavedRaster: width = 1280 height = 720 #Bands = 4 xOff = 0 yOff = 0 dataOffset[0] 0
答案1
得分: 1
你的代码基本上是这样的:
image = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB);
final int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
你从文件系统中读取的图像存储在img
而不是image
中,你从未将任何内容绘制到image
中。
英文:
Essentially your code is
image = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB);
final int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
You are never drawing anything into image
. (The image you read from the filesystem is stored in img
not image
.)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论