簡體   English   中英

如何在java中將圖像轉換為棕褐色

[英]How to convert image to sepia in java

我正在嘗試拍攝圖像並使其變成棕褐色。 出於某種原因,即使我從我買來教自己 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();       

}
}

另外,在我嘗試繪制圖像后,它仍然處於灰度狀態。

評論是正確的。 您將像素值平均化,使它們變灰。 然后您計算像素的棕褐色值,但永遠不會將其分配回像素。 因此,您的圖像保持灰度。

在 if...else 塊之后:

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

好的! 所以謝謝兩位的反饋。 我想出了幾件事。 我應該告訴它用新的“紅色”和“藍色”替換灰色。 但是,這並不能在同一個地方工作,這意味着您需要兩個用於語句,一個用於灰度,另一個用於棕褐色。 搞清楚之后,一切順利! 這是我完成的代碼:

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();       
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM