如何从java中的光栅图像中获取字节[]?

如何从java中的光栅图像中获取字节[]?,java,image,image-processing,raster,Java,Image,Image Processing,Raster,如何从java中的光栅图像中获取字节[]?我试过: byte[]data=((DataBufferByte)bufferedImage.getData().getDataBuffer()).getData() 但这会抛出一个ClassCastException运行时异常:“DataBufferInt不能强制转换为DataBufferByte” 谢谢您的帮助。您可以使用ByteArrayOutputStream获得字节数组,类似这样的方法应该可以: (注意,未经测试的代码) 编辑 这个怎么样? 您

如何从java中的光栅图像中获取
字节[]
?我试过:

byte[]data=((DataBufferByte)bufferedImage.getData().getDataBuffer()).getData()

但这会抛出一个
ClassCastException
运行时异常:“DataBufferInt不能强制转换为DataBufferByte”


谢谢您的帮助。

您可以使用ByteArrayOutputStream获得字节数组,类似这样的方法应该可以: (注意,未经测试的代码)

编辑 这个怎么样? 您需要图像的FileInputstream来读取图像并将其写入ByteArrayOutputStream

ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
try {
    for (int readNum; (readNum = fis.read(buf)) != -1;) {
        bos.write(buf, 0, readNum); 
    }
} catch (IOException ex) {
    //
}
byte[] bytes = bos.toByteArray();

错误说明了一切。你不能做演员。此外,您正在读取文件字节或尝试获取像素值。如果您试图获取像素值,那么它们在文件中不像大多数人认为的那样是线性的。感谢您的快速回复,此异常的修复非常简单。首先,我需要从int[]i=((DataBufferByte)BuffereImage.getData().getDataBuffer()).getData()获取int[]返回值;然后我可以从int[]填充字节[],但我没有得到预期的结果,我想做的只是…我有一个BuffereImage,我想提取它的光栅数据,这样我就可以通过网络发送它使用
DataBuffer::getDataType()
,然后再将它转换为其他缓冲区类型。请参阅Javadoc。读取int读取四个字节,而不是一个字节,因此需要进行一些位工作。感谢您刷新我的位和字节知识,在这种情况下,您建议我做什么?这将以JPEG格式对光栅图像进行编码,并获取该编码的字节。这个问题看起来不像是要问的。@joachim是的,我不想压缩图像,我想在字节[]中获取光栅图像的数据。有人能帮忙吗?你仍然没有回答我的问题,你想读取整个文件还是像素值。因为要读取像素数据,您需要了解JPEG格式。@zerd1984感谢您的努力,但我没有使用FIS读取图像我正在使用Robot类捕获屏幕截图我还有BuffereImage,所以我想提取字节[]中的数据,以便如果我将该数据发送到远程机器,该机器应使用新的ImageIcon(receivedByte[])生成完整图像;我希望现在你我是clearWell如果它是原始数据,那么你应该把每个像素读作int(32位)
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
try {
    for (int readNum; (readNum = fis.read(buf)) != -1;) {
        bos.write(buf, 0, readNum); 
    }
} catch (IOException ex) {
    //
}
byte[] bytes = bos.toByteArray();