Как придать изображению фильтр сепии

#java

#java

Вопрос:

Я пытаюсь распечатать изображение с помощью фильтра сепии, но он просто печатает одно и то же (неотредактированное) изображение дважды. Как мне заставить работать мой код сепии внизу? Код преобразует изображение в оттенки серого, а затем в сепию.

 import images.*;

public class Sepia{

 public static void main(String[]args){
  APImage image = new APImage("lobster.jpg");
  image.draw();
  APImage aCopy = image.clone();
  for (Pixel p: aCopy){
     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);

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

     aCopy.draw();
     aCopy.save();
   }
 }
}
 

Комментарии:

1. Вы думаете, что javascript — это старший брат java или что-то в этом роде? 😉

2. Что такое APImage ? Это не часть стандартной библиотеки Java. Что такое пиксель?

3. @ErwinBolwidt Я тоже погуглил, это home.wlu.edu /~lambertk/hsjava/edition4/whatsnew/imagedocs/… (какой-то неправильный фрагмент кода, ИМХО …)

Ответ №1:

Попробуйте добавить это перед рисованием.

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

кроме того, извлеките рисунок и сохраните из цикла for

Комментарии:

1. Как раз перед aCopy.draw() этим?

2. В дополнение к настройке компонентов RGB, как описано выше: переместите aCopy.draw(); и aCopy.save(); из for цикла -!

3. Примечание: обязательно ли вам использовать эту библиотеку изображений? Если вам не нужно его использовать: рассмотрите другой. class APImage extends JFrame заставляет меня дергаться….

4. @Marco13 Я перепробовал все эти вещи, и это все еще не работает.

5. Подходит ли вам пример «TestGrayscale» из документации APImage?