基于int数组创建WritableRaster

2024-03-17

我需要获取一个 int 数组并将其转换为 BufferImage。我真的对这个主题没有任何背景,我都是从互联网上学到的,所以这就是我想要做的: 从 BufferedImage(done) 创建一个数组,将该数组转换为 IntBuffer(done) - (稍后我需要通过 IntBuffer 对图像进行一些操作),将 IntBuffer 中更改的值放入新数组(done)中,并将该数组转换为 WritableRaster。 (如果我对这个过程的理解不正确,请告诉我)

这是我处理 WritableRaster 的行:

WritableRaster newRaster= newRaster.setPixels(0, 0, width, height, matrix);

Eclipse 将此标记为错误并显示“类型不匹配:无法从 void 转换为 WritableRaster”

请帮忙!我有点失落。

也很抱歉英语不好。

编辑: 矩阵:

         int height=img.getHeight();
         int width=img.getWidth();
         int[]matrix=new int[width*height];

我尝试将值插入栅格的代码部分:

    BufferedImage finalImg = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
    WritableRaster newRaster= (WritableRaster)finalImg.getData();
    newRaster.setPixels(0, 0, width, height, matrix);

错误信息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10769
at java.awt.image.SinglePixelPackedSampleModel.setPixels(Unknown Source)
at java.awt.image.WritableRaster.setPixels(Unknown Source)

您可以创建一个WritableRaster and/or BufferedImage从一个int像这样的数组:

int w = 300;
int h = 200;
int[] matrix = new int[w * h];

// ...manipulate the matrix...

DataBufferInt buffer = new DataBufferInt(matrix, matrix.length);

int[] bandMasks = {0xFF0000, 0xFF00, 0xFF, 0xFF000000}; // ARGB (yes, ARGB, as the masks are R, G, B, A always) order
WritableRaster raster = Raster.createPackedRaster(buffer, w, h, w, bandMasks, null);

System.out.println("raster: " + raster);

ColorModel cm = ColorModel.getRGBdefault();
BufferedImage image = new BufferedImage(cm, raster, cm.isAlphaPremultiplied(), null);

System.err.println("image: " + image);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于int数组创建WritableRaster 的相关文章

随机推荐