如何在java中屏蔽颜色通道?

时间:2012-01-08 10:21:12

标签: java colors mask

我正在尝试编写一个代码,用于屏蔽来自图像的红色和蓝色通道。我已经检索了R,G,B值,但是仍然坚持进一步。请问有人帮我吗?

public class Green {

    public static void main(String args[]) throws IOException {

        BufferedImage bi = ImageIO.read(new File("image.jpg"));

        for (int x = 0; x <= bi.getWidth(); x++) {
            for (int y = 0; y <= bi.getHeight(); y++) {
                int pixelCol = bi.getRGB(x, y);
                int r = (pixelCol >> 16) & 0xff;
                int b = pixelCol & 0xff;
                int g = (pixelCol >> 8) & 0xff;
                int px = 0;
                px = (px | (g << 8));
                bi.setRGB(x, y, px);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:3)

一些评论:

  • 使用IDE(集成开发环境),如Eclipse或NetBeans。
  • 在for循环中使用<代替<=作为条件。
  • 使用代码格式(这是IDE的一项功能)
  • 为了清晰起见,订购rgb

    int r = (color >> 16) & 0xff;
    int g = (color >> 8) & 0xff;
    int b = (color >> 0) & 0xff;
    
  • 既然你说你被卡住了,剩下要做的就是保存被操纵的图像:

    ImageIO.write(bi, "JPG", new File("green.jpg"));
    
  • 快速执行蒙版的一个小技巧是:

    bi.setRGB(x, y, bi.getRGB(x, y) & 0xff00ff00);
    

所以,干净的工作代码应该是这样的:

public class Green
{
    public static void main(String args[]) throws IOException
    {     
        /* Read the image */
        BufferedImage bi= ImageIO.read(new File("image.jpg"));   

        /* Loop through all the pixels */   
        for (int x=0; x < bi.getWidth(); x++)
        {          
            for (int y = 0; y < bi.getHeight(); y++)
            {   
                /* Apply the green mask */                      
                bi.setRGB(x, y, bi.getRGB(x, y) & 0xff00ff00);
            }
        }

        /* Save the image */
        ImageIO.write(bi, "JPG", new File("green_mask.jpg"));
    }
}

答案 1 :(得分:0)

除了复制和缩放图像外,Java 2D API还可以过滤图像。过滤是通过将算法应用于源图像的像素来绘制或生成新图像。

可以使用以下方法应用图像过滤器:

void Graphics2D.drawImage(BufferedImage img,
                      BufferedImageOp op,
                      int x, int y)

BufferedImageOp 参数实现过滤器。

有关图像过滤器示例,请参阅此文档:http://ptgmedia.pearsoncmg.com/images/9780132413930/samplechapter/0132413930_CH08.pdf