Как назначить новые значения цвета диапазонам цветов
Мне нужна моя программа, чтобы просмотреть пиксели на изображении, изменить их на оттенки серого. Затем мне нужно взять диапазон значений серого и раскрасить их, используя операторы if - else и if-else-if. Может кто-нибудь помочь мне разобраться?
Вот мой код до сих пор:
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class Colorize {
BufferedImage image;
int width;
int height;
public Colorize() {
try {
File input = new File("Grayscale.jpg");
image = ImageIO.read(input);
width = image.getWidth();
height = image.getHeight();
for(int i=0; i<height; i++){
for(int j=0; j<width; j++){
int col = image.getRGB(i, j);
Color c = new Color(col, true);
int red = c.getRed();
int green = c.getGreen();
int blue = c.getBlue();
if ((red>= 1)&&(red<=30)) {
c = new Color(c.getRed() + 10, c.getGreen(), c.getBlue());
}
if ((red>= 31)&&(red<=60)) {
c = new Color(c.getRed(), c.getGreen() + 10, c.getBlue());
}
if ((red>= 61)&&(red<=90)) {
c = new Color(c.getRed(), c.getGreen(), c.getBlue() + 10);
}
if ((red>= 91)&&(red<=120)) {
c = new Color(c.getRed() + 10, c.getGreen() + 10, c.getBlue());
}
if ((red>= 121)&&(red<=150)) {
c = new Color(c.getRed() + 10, c.getGreen(), c.getBlue() + 10);
}
if ((red>= 151)&&(red<=180)) {
c = new Color(c.getRed(), c.getGreen() + 10, c.getBlue() + 10);
}
if ((red>= 181)&&(red<=210)) {
c = new Color(c.getRed() - 10, c.getGreen(), c.getBlue());
}
if ((red>= 211)&&(red<=240)) {
c = new Color(c.getRed(), c.getGreen() - 10, c.getBlue());
}
else {
c = new Color(c.getRed(), c.getGreen(), c.getBlue());
}
image.setRGB(j,i,c.getRGB());
}
}
File output = new File("Colorize.jpg");
ImageIO.write(image, "jpg", output);
} catch (Exception e) {}
}
static public void main(String args[]) throws Exception
{
Colorize obj = new Colorize();
}
}
Вот изображение на случай, если вы, ребята, захотите попробовать код. Пока ничего не пишется в папку.
2 ответа
Где-то должно быть исключение, к сожалению, вы ловите исключение и ничего не делаете.
замещать
catch (Exception e) {}
с
catch (Exception e) {
e.printStackTrace();
}
Это поможет вам найти то, что происходит. Я предполагаю, что вы получите FileNotFoundException, потому что Grayscale.jpg, вероятно, не в вашем рабочем каталоге.
Чтобы преобразовать изображение в изображение в оттенках серого, вам нужно средневзвешенное значение цветов. 0,2126 р 0,7152 г 0,0722 б. Получение цветов таким же образом, как работает getRed() getGreen() и getBlue(). Наконец добавьте свои цвета и установите его с помощью setRGB. Это превратит ваше изображение в оттенки серого.
for(int i=0; i<image.getWidth(); i++){
for(int j=0; j<image.getHeight(); j++){
int color = image.getRGB(i,j);
int r = ((color >> 16) & 0xFF) * 0.2126;
int g = ((color >> 8) & 0xFF) * 0.7152;
int b = ((color) & 0xFF) * 0.0722;
int finalColor = (r << 16) | (g << 8) | b;
image.setRGB(i,j,finalColor);
}
}
Отредактируйте свой вопрос с более подробной информацией о вашей раскраске, чтобы я мог помочь больше.