Цель моей программы - сделать изображение ярче. Вот как это делается:
- Проверяет RGB-канал пикселя
- Находит наибольшее значение rgb ч / б все они
- Он находит множитель для значения этого канала 255
- Применяет множитель ко всему каналу
Код:
package Assign_4_B;
import Media.*; // for Picture and Sound etc.
import java.awt.*; // for Color objects and methods
import static java.lang.Math.*; // for math constants and functions
import static java.awt.Color.*; // for Color constants
/** This class ...
*
* @author <your name>
* @version 1.0 (<date>) */
public class Brighten {
private PictureDisplayer display;
private Picture pic;
public Brighten ( ) {
display = new PictureDisplayer();
pic = new Picture();
display.placePicture(pic);
display.waitForUser();
normIntensity(pic);
display.close();
}; // constructor
private int maxChannel(Pixel p){
int red;
int blue;
int green;
red = p.getRed();
blue = p.getBlue();
green = p.getGreen();
if((red >= blue) && (red >= green)){
return red;
}
else if ((blue >= red) && (blue >= green)){
return blue;
}
else {return green;}
}
private void normIntensity (Picture img){
Pixel a;
int r;
int b;
int g;
int hv;
int multi;
while(img.hasNext()){
a = img.next();
hv = maxChannel(a);
multi = 255 / hv;
r = a.getRed();
b = a.getBlue();
g = a.getGreen();
a.setRed(multi * r);
a.setBlue(multi * b);
a.setGreen(multi * g);
}
};
public static void main ( String[] args ) { Brighten s = new Brighten(); };
} // <className>
Проблема в моем коде в том, что он портит значение зеленого канала.
Если исходное изображение таково:
Результат, который я хочу получить, таков: ![enter image description here](https://i.stack.imgur.com/lBMIq.jpg)
Это закончится так:
Он будет делать это только до тех пор, пока не выдаст мне этот код ошибки:
java.lang.ArithmeticException: / by zero
at Assign_4_B.Brighten.normIntensity(Brighten.java:59)
at Assign_4_B.Brighten.<init>(Brighten.java:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267)