如何在java中将图像转换为棕褐色

时间:2017-10-03 00:00:08

标签: java image

我试图拍摄一张照片并将其制作成棕褐色。出于某种原因,即使我从我买的书中得到它来自学java,但代码仍无法正常工作。是否有遗漏的东西或某个不正确的地方?我见过的每一个问题都有一些我甚至都不知道的疯狂公式和符号。有人能帮助我吗?

import images.APImage;
import images.Pixel;

public class Sepia{

public static void main(String[] args){

    APImage image = new APImage("DogStockPhoto.jpg");
    //image.draw();
    //converts to grayscale
    for(Pixel p: image){
        int red = p.getRed();
        int green = p.getGreen();
        int blue = p.getBlue();
        int average = (red + green + blue)/3;
        p.setRed(average);
        p.setGreen(average);
        p.setBlue(average);

        //converts to sepia
        if(red < 63){
            red = (int)(red * 1.1);
            blue = (int)(blue * 0.9);
        }else if(red < 192){
            red = (int)(red * 1.15);
            blue = (int)(blue * 0.85);
        }else{
            red = Math.min((int)(red * 1.08), 255);
            blue = (int)(blue * 0.93);
        }
    }

    image.draw();       

}
}

此外,在我尝试绘制图像后,它仍处于灰度级。

2 个答案:

答案 0 :(得分:0)

评论是正确的。您将像素值平均化,使其变灰。然后计算像素的棕褐色值,但不要将其分配回像素。因此,您的图像保持灰度。

在if ... else块之后:

p.setRed(red);
p.setBlue(blue);

答案 1 :(得分:0)

OK!谢谢你们的反馈意见。我想出了几件事。我应该告诉它用新的“红色”和“蓝色”替换灰色。但是,这并不是所有在同一个地方都有效,这意味着你需要两个for语句,一个用于灰度,另一个用于棕褐色。在搞清楚这一切之后一切顺利!这是我完成的代码:

import images.APImage;
import images.Pixel;

public class Sepia{

public static void main(String[] args){

    APImage image = new APImage("DogStockPhoto.jpg");
    //image.draw();

    //converts to grayscale
    for(Pixel p: image){
        int red = p.getRed();
        int green = p.getGreen();
        int blue = p.getBlue();
        int average = (red + green + blue)/3;
        p.setRed(average);
        p.setGreen(average);
        p.setBlue(average);
    }

    //converts to sepia
    for(Pixel p: image){
        int red = p.getRed();
        int blue = p.getBlue();
        if(red < 63){
            red = (int)(red * 1.1);
            blue = (int)(blue * 0.9);
        }else if(red < 192){
            red = (int)(red * 1.15);
            blue = (int)(blue * 0.85);
        }else{
            red = Math.min((int)(red * 1.08), 255);
            blue = (int)(blue * 0.93);
        }
        p.setRed(red);
        p.setBlue(blue);
    }

    image.draw();       
}
}