gpt4 book ai didi

java - 基于 int 数组创建一个 WritableRaster

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:26:04 25 4
gpt4 key购买 nike

我需要获取一个 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)

最佳答案

您可以从 int 数组创建一个 WritableRaster 和/或 BufferedImage,如下所示:

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);

关于java - 基于 int 数组创建一个 WritableRaster,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25178810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com