BufferedImage TYPE_BYTE_BINARY改变像素的颜色

时间:2014-12-24 07:37:00

标签: java image

我一直在努力寻找并回答这个问题。我正在尝试使用TYPE_BYTE_BINARY的imageType更改大型BufferedImage中像素的颜色。默认情况下,当我创建图像时,它会创建一个很好的黑色图像,但我似乎无法将像素颜色更改为白色。

这是我想要做的基本想法。

BufferedImage bi = new BufferedImage(dim[0], dim[1], BufferedImage.TYPE_BYTE_BINARY);
bi.setRBG(x, y, 255)

这对我来说似乎很奇怪,因为TYPE_BYTE_BINARY图像不会有RGB颜色,所以我知道这不是正确的解决方案。

我的另一个想法是使用createGraphics()方法创建多个bufferedImage TYPE_BYTE_BINARY,然后将所有这些缓冲的图像组合成一个大的bufferedImage,但在使用TYPE_BYTE_BINARY imageType时我找不到任何相关信息。

在阅读本文时,我遇到的人说你需要在BufferedImage上使用createGraphics()方法,但我不想这样做,因为它会占用太多内存。

我特意为此方法创建了此链接http://docs.oracle.com/javase/7/docs/api/java/awt/image/Raster.html createPackedRaster()(第二个)。这似乎可能是在正确的轨道上。

这些是能够编辑TYPE_BYTE_BINARY图像的唯一选项吗?或者有另一种方式类似于python处理1位深度图像的方式吗?

在python中,这就是所有需要完成的事情。

im = Image.new("1", (imageDim, imageDim), "white")
picture = im.load()
picture[x, y] = 0 # 0 or 1 to change color black or white

感谢所有帮助或指导。

1 个答案:

答案 0 :(得分:3)

一切正常。我能够在图像上获得白色像素。

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.awt.Color;
import java.io.File;

public class MakeImage
{
    public static void main(String[] args)
    { 
        BufferedImage im = new BufferedImage(100, 100, BufferedImage.TYPE_BYTE_BINARY);
        im.setRGB(10, 10, Color.WHITE.getRGB());

        try
        {
            ImageIO.write(im, "png", new File("image.png"));
        }
        catch (IOException e)
        {
            System.out.println("Some exception occured " + e);
        }
    }
}