繁体   English   中英

java-如何使用setRGB制作图像?

[英]java - how to make an image using setRGB?

我有2D数组以保持颜色分量值:

p[pixel_value][red]
p[pixel_value][green]
p[pixel_value][blue]

我只是不知道如何使用它们来制作图像。

我读了有关setRGB的文章 ,我了解的是我应该将所有这些混合在一起成为RGBArray。 那怎么做呢?

没有setRGB可以制作图像吗? 我需要一些解释。

setRGB()方法可用于设置现有图像的像素颜色。 您可以使用2D数组中存储的值打开一个已经存在的图像并设置其所有像素。 您可以这样做:

BufferedImage img = ImageIO.read(new File("image which you want to change the pixels"));
for(int width=0; width < img.getWidth(); width++)
{
    for(int height=0; height < img.getHeight(); height++)
    {
          Color temp = new Color(p[pixel_value][red], p[pixel_value][green], p[pixel_value][blue]);
          img.setRGB(width, height, temp.getRGB());
    }
}
ImageIO.write(img, "jpg", new File("where you want to store this new image"));

这样,您可以遍历所有像素并相应地设置其颜色。

注意:这样,您将丢失原始图像。 这只是我所知道的一种方式。

您需要的是BufferedImage 如果要使用RGB,请创建一个TYPE_3BYTE_BGR类型的BufferedImage ,并指定宽度和高度。

速览:
BufferedImage子类描述了具有图像数据可访问缓冲区的Image。

然后,调用getRaster()方法以获取WritableRaster

速览:
此类扩展了Raster以提供像素写入功能。

然后,使用setPixel(int x, int y, double[] dArray)方法设置像素。

更新:

如果您只想读取图像,请使用ImageIO.read(File f)方法。 它使您仅需一个方法调用即可读取图像文件。

SSCCE有点:

BufferedImage img = null;
try {
    img = ImageIO.read(new File("strawberry.jpg"));
} catch (IOException e) {
}

您要手动设置RGB值吗?

您需要知道,由于int是32位的,因此它包含所有4个rgb值(透明性为1)。

xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
^Alpha     ^red    ^green    ^blue

您可以通过使用二进制算术来使用4个int值:

int rgb = (red << 16) && () (green << 8) & (blue);
bufferedImage.setRGB(x, y, rgb);

在上面,您还可以根据需要添加Alpha 您只需将二进制代码“推送”到正确的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM