我有一张照片,我正在尝试删除所有绿色像素。如何使用简单的java和2D数组执行此操作?
到目前为止,我的代码看起来像这样:
public void removeGreen() {
Picture pic = new Picture("IMG_7320.JPG");
Pixel pixel = null;
for (int row = 0; row < pic.getHeight(); row++) {
for (int col = 0; col < pic.getWidth(); col++) {
pixel = getPixel(row,col);
pixel.getColor();
if(pixel.getRed() < 40 & pixel.getBlue() < 160 & pixel.getGreen() > 220) {
Color white = new Color(255,255,255);
pixel.setColor(white);
}
}
}
}
(目前我正在尝试仅用白色像素替换绿色像素,因为我不确定如何完全删除像素。)
我用来测试removeGreen()方法的主方法中的代码如下所示:
//method to test removeGreen
public static void testRemoveGreen() {
Picture me = new Picture("IMG_7320.JPG");
me.explore();
me.removeGreen();
me.explore();
}
所以,我的代码现在看起来像这样:
public void removeGreen(图片图片){
for(int row = 0; row&lt; pic.getHeight(); row ++){
for (int col = 0; col < pic.getWidth(); col++) {
Pixel pixel = pic.getPixel(row,col);
if((pixel.getRed() < 40) && (pixel.getBlue() < 160) && (pixel.getGreen() > 220)) {
Color white = new Color(255,255,255);
pixel.setColor(white);
}
}
} }
我的主要方法仍然是一样的。我仍然不明白为什么方法不能正常工作。
答案 0 :(得分:0)
以下说明已更改传递的pic
参数。
public static void removeGreen(Picture pic) {
for (int row = 0; row < pic.getHeight(); row++) {
for (int col = 0; col < pic.getWidth(); col++) {
Pixel pixel = pic.getPixel(row,col);
if (pixel.getRed() < 40 && pixel.getBlue() < 160
&& pixel.getGreen() > 220) {
pixel.setColor(Color.white);
}
}
}
}
&&
是一个捷径AND:x && y()
不会调用y,x是假的。
注意pic.getPixel
。如果removeGreen
旨在作为Picture
的方法,请删除参数和static关键字,并pic.
。
public static void testRemoveGreen() {
Picture me = new Picture("IMG_7320.JPG");
me.explore();
removeGreen(me);
me.explore();
}
由于.jpg,JPEG格式没有透明度,因此需要将某些颜色(如白色)显示为“背景”。