我正在为这个代码而迷失方向。我必须使用java制作一张灰度图片。我有基本代码,但我不知道放入什么不会使整个屏幕变灰。我正忙着努力,但我迷失了,不知道接下来该做什么。它目前的方式是,它只需要一个图像经过一个过程,然后使它的新版本完全相同,但我需要使新版本的灰色版本。 访问:https://ask.extension.org/uploads/question/images/attachments/000/037/087/image_300x300%2523.jpg?1406470060我正在使用的树形图片。
import java.awt.*; //import the awt graphics package
class TrueColors //start of the class
{
TrueColors() //start of the main method
{
Picture pictureObj = new Picture("trunk.jpg");
pictureObj.explore();
int redValue = 0; int greenValue = 0; int blueValue = 0;
Pixel targetPixel = new Pixel(pictureObj, 0,0);
Color pixelColor = null;
for(int y=0; y < pictureObj.getHeight(); y++)
{
for(int x = 0; x < pictureObj.getWidth(); x++)
{
targetPixel = pictureObj.getPixel(x,y);
pixelColor = targetPixel.getColor();
redValue = pixelColor.getRed();
greenValue = pixelColor.getGreen();
blueValue = pixelColor.getBlue();
pixelColor = new Color(redValue, greenValue, blueValue);
targetPixel.setColor(pixelColor);
}//end of the inner for loop
}//end of the outer for loop
pictureObj.explore();
pictureObj.write("NewTrunk.jpg");
pictureObj.show();
}//end of main method
}//end of class
答案 0 :(得分:0)
您需要将RGB值更改为等于使其成为灰度。有很多可能的算法;这是一个:
int gray = (0.2989 * red) + (0.5870 * green) + (0.1140 * blue);
pixelColor = new Color(gray, gray, gray);
答案 1 :(得分:0)
我建议你查看这个问题:convert a RGB image to grayscale Image reducing the memory in java。
虽然你的意图不是为了减少记忆,但它应该起到同样的作用。
- edit-- 一个简单的灰度算法就是取红色,绿色和蓝色的平均值。与您可以做的其他帖子类似:
redValue = pixelColor.getRed();
greenValue = pixelColor.getGreen();
blueValue = pixelColor.getBlue();
greyValue = (int)((redValue + greenValue + blueValue)/3)
pixelColor = new Color(greyValue, greeyValue, greyValue);
targetPixel.setColor(pixelColor);