我有一个带有RGB值的byte[]数组。我想创建BufferedImage,而不需要逐个设置像素,因为图像可能很大。我找到了以下代码片段:
byte[] frame = ...;
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
img.setData(Raster.createRaster(img.getSampleModel(), new DataBufferByte(frame, frame.length), new Point() ) );
这种方法很好用,但有一个小问题;-) TYPE_3BYTE_BGR
需要按相反的顺序来处理字节。
所以问题是:
- 是否可能以不创建具有期望顺序的新字节数组的方式加载我的数组?
- 如果不可能,那么除了使用 for 循环从 RGB 格式复制数据到 BGR 之外,是否有更好的方法?
BufferedImage.setData
的实现,因为它会逐行从你传入的光栅数据中复制数据。如果你非常关注性能,那么BufferedImage.getRaster().setDataElements
似乎是你应该使用的方法。(而且你只有在频繁执行此操作,比如每秒多次时才需要关注性能) - Erwin Bolwidt