我正在尝试编写一个代码,用于屏蔽来自图像的红色和蓝色通道。我已经检索了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);
}
}
}
}
答案 0 :(得分:3)
一些评论:
<
代替<=
作为条件。为了清晰起见,订购r
,g
和b
。
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