使用Java的图片上的灰度

时间:2016-07-29 15:48:04

标签: java image colors jpeg

我正在为这个代码而迷失方向。我必须使用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

2 个答案:

答案 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);