当前位置: 首页 > 知识库问答 >
问题:

基于int数组创建WritableRaster

柳均
2023-03-14

我需要取一个int数组并将其转换为BufferImage。我在这个问题上没有任何背景知识,我都是从互联网上学习的,所以下面是我要做的:从BufferedImage创建一个数组(完成),将这个数组转换为IntBuffer(完成)-(稍后我需要通过IntBuffer对图像执行一些操作),将IntBuffer中更改的值放入新数组(完成),并将这个数组转换为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)

共有1个答案

雍骏俊
2023-03-14

您可以从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);
 类似资料:
  • 我试图创建一个基于用户输入的数学学生、科学学生和计算机学生的数组。 所以基本上用户应该选择他们想要添加的学生,然后输入学生详细信息。 下面我添加了我到目前为止的代码: 计算机学生班: 我该怎么做?

  • 假设我有以下数据 现在我想向添加两个新列,分别命名为和,具有各自的值(1,2)。我可以使用循环来执行此操作,但我想以data.table的方式执行。 结果将是这样的: 到目前为止,我想出了类似这样的东西 其中< code>xx是一个< code > data . table -类似于< code >的命令。N,它寻址< code > by -组的值。 谢谢你的帮助! 附录:for-loop 方式

  • 我已经看到了这个问题:从数组创建ArrayList 然而,当我用下面的代码尝试该解决方案时,它并不是在所有情况下都有效: 我做错了什么?代码不应该

  • 我有一个名为的列表,每个坐标包含三个值。两个x、y类型和一个名称。我的代码接收坐标项作为输入,并通过创建类型的来根据名称对它们进行分组。通过这种方式,我没有一对坐标与一个名字相关联,而是有一个名字与所有相应的坐标相关联。 例如。: 地图前: 其中A、B和C是名称。如果多个名称出现在一起,则表示它们共享相同的坐标。 地图后: 我想要实现的是将每个名字从组中分离出来,并将所有坐标链接到那个名字。 例如

  • 原文:Array creation 另见: 数组创建例程 导言 数组创建的一般机制有五种: 从其它Python的结构转换(如列表和元组) 内置的NumPy数组创建对象(如 arange, ones, zeros以及其它) 从磁盘中读取标准或自定义格式的数据 通过使用字符串或者缓冲区,从原始的字节创建数组 使用特殊的库函数(比如random) 本节不会涉及复制和连接等扩展和转换现有数组的方法,也不会

  • 问题内容: 我看到了一个问题:从数组创建ArrayList 但是,当我使用以下代码尝试该解决方案时,它并不能在所有情况下都有效: 我在这里做错了什么?代码不应该编译就好吗? 问题答案: 问题在 是,被认为是一个单一的,因为基本数组从延伸实例。如果你有这样的工作,而不是因为现在你要发送的数组。 根据您的评论:如果您仍然想使用一个(或另一个原始类型的数组)作为主要数据,那么您需要使用wrapper类创