基于int数组创建WritableRaster

use*_*631 3 java raster image-processing

我需要一个int数组并将其转换为BufferImage.我真的没有任何关于这个主题的背景知识我从互联网上学到了所有这就是我要做的事情:从BufferedImage创建一个数组(完成),将这个数组转换为IntBuffer(完成) - (后来我"马上要做通过IntBuffer图像上的一些opertions),把更改后的值从IntBuffer在新阵列(完成),并把这个数组的WritableRaster.(如果在我的过程中有些不对劲,请告诉我)

这是我处理WritableRaster的行:

WritableRaster newRaster= newRaster.setPixels(0, 0, width, height, matrix);
Run Code Online (Sandbox Code Playgroud)

Eclipse将此标记为错误并说''类型不匹配:无法从void转换为WritableRaster"

请帮忙!我有点迷茫.

也很抱歉英语不好.

编辑:矩阵:

         int height=img.getHeight();
         int width=img.getWidth();
         int[]matrix=new int[width*height];
Run Code Online (Sandbox Code Playgroud)

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

    BufferedImage finalImg = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
    WritableRaster newRaster= (WritableRaster)finalImg.getData();
    newRaster.setPixels(0, 0, width, height, matrix);
Run Code Online (Sandbox Code Playgroud)

错误消息:

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

har*_*ldK 6

您可以创建WritableRaster和/或BufferedImageint这样的数组:

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);
Run Code Online (Sandbox Code Playgroud)