首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自RGB byte[]数组的byte[]

来自RGB byte[]数组的byte[]
EN

Stack Overflow用户
提问于 2019-10-29 23:50:02
回答 1查看 616关注 0票数 3

我有一个带有RGB值的byte[]数组。我想创建BufferedImage而不逐个设置像素,因为图像可能很大。我找到了以下片段:

代码语言:javascript
复制
        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期望字节的顺序是相反的。

所以问题是:

  1. 是否可以以某种方式加载我的数组,而不实际创建一个具有预期顺序的新字节数组?
  2. (如果不可能),有没有比循环将数据从RGB格式复制到BGR?

的更好的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-30 00:48:51

试试这段代码

代码语言:javascript
复制
BufferedImage img = create3ByteRGBImage(int width, int height, new int[] {8, 8, 8},
                                     new int[] {0, 1, 2});    

private BufferedImage create3ByteRGBImage(width, height, int[] nBits, int[] bOffs) {
            ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
            ColorModel colorModel =
                new ComponentColorModel(cs, nBits,
                                        false, false,
                                        Transparency.OPAQUE,
                                        DataBuffer.TYPE_BYTE);
            WritableRaster raster =
                Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE,
                                               width, height,
                                               width*3, 3,
                                               bOffs, null);
            return new BufferedImage(colorModel, raster, false, null);
        }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58616909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档