Назначение задает вопрос: «Переименуйте метод setLuminance как смесь и возьмите два изображения в качестве параметров: переднего плана и фона. Последовательность через пиксели переднего плана и фона одновременно (предположим, что они имеют точно такой же размер), изменяя яркость пикселей переднего плана. Вместо использования постоянной яркости TARGET, как в части A, используйте яркость соответствующего пикселя фонового изображения в качестве цели. Все остальное может оставаться неизменным ».Это значение, по-видимому, дает мне нуль?
и это именно то, что я сделал, за исключением случаев, когда у меня нет функции sClip в функции getLuminance (чтобы получить среднее значение из трех значений цветового канала), выход остановит треть пути до загрузки изображения, потому что он говорит, что есть арифметическая проблема и не может делить на ноль.
и мой выход теперь составляет 90% ответа.
Я считаю, что я следил за каждым руководство, поэтому я могучий запутаться
public Luminance() {
Picture sunflower, earth;
sunflower = new Picture();
earth = new Picture();
display = new PictureDisplayer(sunflower);
display.waitForUser();
blend(sunflower, earth);
display.close();
System.exit(0);
}
private int getLuminance (Pixel p) {
int r; // red value of pixel
int g; // green value of pixel
int b; // blue value of pixel
int v; // average
r = p.getRed();
g = p.getGreen();
b = p.getBlue();
v = sClip((r + g + b)/3);
return v;
}
private void blend(Picture sunflower, Picture earth) {
Pixel s,e;
int r; // red value of pixel
int g; // green value of pixel
int b; // blue value of pixel
while (sunflower.hasNext()) {
s = sunflower.next();
e = earth.next();
r = s.getRed();
g = s.getGreen();
b = s.getBlue();
s.setRed(clip ((int) (r * (getLuminance(e))/getLuminance(s))));
s.setGreen(clip ((int) (g * (getLuminance(e))/getLuminance(s))));
s.setBlue(clip ((int) (b * (getLuminance(e))/getLuminance(s))));
}
}
private int clip(int val){
if (val <=255){
return val;
}
else {
return 255;
}
}
private int sClip (int val){
if (val == 0){
return 1;
}
else {
return val;
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {Luminance r = new Luminance();
// TODO code application logic here