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

从中转换灰度值。csv到BuffereImage

璩和璧
2023-03-14

我正在尝试转换一个。使用BuffereImage将包含灰度值的csv文件转换为图像。csv最初被读入pixArray[],其中所有值都是双倍的。

我正在尝试使用BufferedImage使用代码创建100x100px输出图像

                BufferedImage image = new BufferedImage(width,height,BufferedImage.
                    TYPE_BYTE_GRAY);
            for(int x = 0; x < width; x++)
            {
                for(int y = 0; y < height; y++)
                {
                    image.setRGB(x, y, (int)Math.round(pixArray[y]));
                }
            }

            File file_out = new File("output.png");
            try {
                ImageIO.write(image, "png", file_out);
            } catch (IOException e) {
                e.printStackTrace();
            }

但我只有一个100x100的黑色方块作为输出。

我尝试了TYPE_BYTE_GRAY以及outout的png格式,但没有成功,也找不到导致此错误的原因。

共有2个答案

缪成天
2023-03-14

发布替代解决方案。虽然Jim的答案是正确且有效的,但它也是将样本值放入灰度buffereImage的最慢方法之一。

带有TYPE_BYTE_GRAYbuffereImage不需要与RGB颜色进行所有转换。要将灰度值直接放入图像中,请通过图像的光栅进行操作:

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
WritableRaster raster = image.getRaster();

for (int y = 0; y < height; y++) { 
    int value = (int) Math.round(pixArray[y])

    for (int x = 0; x < width; x++) {
         raster.setSample(x, y, 0, value);
    }
}

*)速度慢是因为创建了过多的一次性颜色实例,但主要是因为颜色空间与sRGB颜色空间之间的转换。在100x100图像中可能不太明显,但如果你尝试1000x1000或更大,你会注意到。

PS:我还重新安排了循环,在内部循环中循环x。由于现代CPU中的数据局部性和缓存,这通常更快,尤其是在读取值时。在您的情况下,这很重要,因为您只需要计算(舍入、转换)每行的值。

竺承望
2023-03-14

应该是的

int g = (int)Math.round(pixArray[y]); 
image.setRGB(x,y,new Color(g,g,g).getRGB());  

您当前的代码所做的是将alpha设置为像素值,但使颜色分量全部为零。

 类似资料:
  • 问题内容: 我正在使用aparapi编写Buddhabrot分形生成器。我将其中的OpenCL部分工作了,得到了一个表示每个像素的单维数组。我将最终图像的尺寸作为最终整数,并编写了代码以获取该数组中任意点的索引。我想将其另存为图像,并且尝试将BufferedImage与TYPE_USHORT_GRAY一起使用。这是我到目前为止的内容: 问题是,我不知道将RGB设置为什么。我需要做什么? 问题答案:

  • 编辑3: 编辑2: 像这样创建了图像.... 编辑: 我意识到我试图问的是如何从有符号灰度到无符号灰度,因为我说添加256对我不起作用,而且这似乎仍然会使图像变暗,因为它不会将127个有符号值的值提高到256无符号。(希望我表达得正确。 根据标题,我从缓冲图像中通过 数组的范围从-128到127。问题是,当我试图通过将int[]传递给BuffereImage来基于int[]重建图像时,结果太暗,更

  • 所以我试图转换一个. xml数据源: 转换成. csv但以这种格式格式化 我有重复的元素,比如“title”、“description”等,我想将它们从完全垂直的xml格式中提取出来,并将每个元素分解成一个单独的列。 我发现了一个工具,我相信它确实可以做到这一点,但我不知道如何设置它 我有两个文件——a。蝙蝠和。罐子在内部。bat我们有以下默认代码: 我不知道该怎么修改这个。有谁能提供一些建议吗?

  • 我有这样的CSV结构 我还有一个json响应 我需要这样的输出

  • 我使用以下代码来获取灰度图像的R、G、B值(它们都将是相同的),但输出给我负值。 为什么会这样?我完全糊涂了。 此处,结果[1]应对应于“R”值。那幺它怎么会是负面的呢?

  • 问题内容: 你好,我正在将图像从彩色转换为纯黑白,结果是深色图像。我没有原因。以下是我的代码,它受SO上其他代码的启发。任何指导都会有所帮助。 我没有弄错我在做什么。使用任何其他开放源代码库的任何其他想法都可以。 工作::::: 问题答案: 您实际上并没有将彩色图像转换为黑白图像。您正在创建与空白图片相同大小的新空白图片。您实际上需要做一些处理旧图像的操作。