【问题标题】:Converting an array to image Java将数组转换为图像 Java
【发布时间】:2022-01-03 02:03:58
【问题描述】:

我想将像素数组转换为图像,以便我可以读取图像的每个像素,我已经将图像转换为像素,现在我想要做的是我有一张RGB圆圈,将图像转换为像素后我想再次绘制图像而不是整个画面,我想单独绘制红色圆圈,单独绘制绿色圆圈和单独绘制蓝色圆圈并将图像存储在一个文件中,如何完成了吗?

这是我用来将图像转换为数组像素的代码:

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.IOException;

public class BMPtoArray {
public static int[] convertToPixels(Image img) {
    int width = img.getWidth(null);
    int height = img.getHeight(null);
    int[] pixel = new int[width * height];

    PixelGrabber pg = new PixelGrabber(img, 0, 0, width, height, pixel, 0, width);
    try {
        pg.grabPixels();
    } catch (InterruptedException e) {
        throw new IllegalStateException("Error: Interrupted Waiting for Pixels");
    }
    if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
        throw new IllegalStateException("Error: Image Fetch Aborted");
    }
    return pixel;
}
public static void main(String[] args) throws IOException {
    BufferedImage image = ImageIO.read(new File("C:\\Users\\Mhamd\\Desktop\\3rd year 
first semester\\Analysis and Coding\\labs\\2.2Java\\src\\circleRGB.bmp"));
    //System.out.println(convertToPixels(image));
}
}

这是图片:

所以这基本上就是我想要实现的目标

[![这就是我想要实现的][2]][2]

【问题讨论】:

  • 您可能希望查看裁剪图像,而不是处理像素。 stackoverflow.com/questions/2386064/…
  • @computercarguy 谢谢,但我不想裁剪图像,我想保留旧图像的尺寸,而不是绘制所有圆圈,我想将每种颜色单独绘制为在上图中
  • 我在想你想保持重叠的颜色交互,但如果不是这样,那为什么不简单地在自己的BufferedImage 中绘制圆圈并单独保存呢?即使图像是动态生成的,您也应该能够跟踪各个更改,然后在每个自己的图像中重新创建它们。或者为您从不显示的每个元素保留一个 BufferedImages 数组。这会占用大量 RAM,但它类似于 Photoshop 和 Gimp 中的图层。
  • 当您使用BufferedImage 时,您不需要如此复杂的方法,请参阅getRGBsetRGB

标签: java swing


【解决方案1】:

这是一个如何“关闭”红色通道的简单示例:

final BufferedImage image = ImageIO.read(new File("test.bmp"));
int red = 0x00FF0000;
for (int row = 0; row < image.getHeight(); row++) {
    for (int col = 0; col < image.getWidth(); col++) {
        int color = image.getRGB(col, row);
        color &= ~red;
        image.setRGB(col, row, color);
    }
}

这会将每个 RGB 像素中的红色设置为 0。您可以重复其他颜色和组合。

这会从您的源图像生成:

【讨论】:

  • 正是需要的,非常感谢
猜你喜欢
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 2016-06-19
  • 1970-01-01
  • 2013-03-03
  • 2011-05-25
  • 1970-01-01
相关资源
最近更新 更多