Нужно сделать градацию серого. - Java
Формулировка задачи:
Помогите пожайлуста!
Есть програма нужно сделать градацию серого.
package rastr;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class rastr {
public static void main(String[] args) throws IOException {
BufferedImage img = ImageIO.read(new File("in.png"));
int height = img.getHeight();
int width = img.getWidth();
byte[][] alpha = new byte[width][height];
byte[][] red = new byte[width][height];
byte[][] green = new byte[width][height];
byte[][] blue = new byte[width][height];
for (int x = 0; x < width;x++) {
for (int y = 0; y < height;y++) {
int color = img.getRGB(x, y);
alpha[x][y] = (byte) (color >> 24);
red[x][y] = (byte) (color >> 16);
green[x][y] = (byte) (color >> 8);
blue[x][y] = (byte) (color);
}
}
// --------------------------------------------
// --------------------------------------------
BufferedImage outImg = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int color = blue[x][y];
color += (green[x][y] << 8);
color += (red[x][y] << 16);
color += (alpha[x][y] << 24);
outImg.setRGB(x, y, color);
}
}
ImageIO.write(outImg, "png", new File("out img1.png"));
}
}Решение задачи: «Нужно сделать градацию серого.»
textual
Листинг программы
final class gray {
public static void run(java.awt.image.BufferedImage img){
int rgb, r, g, b;
for(int i = 0; i < img.getWidth(); ++i){
for(int j = 0; j < img.getHeight(); ++j){
rgb = img.getRGB(i, j);
r = (rgb >> 16) & 0xFF;
g = (rgb >> 8) & 0xFF;
b = rgb & 0xFF;
r = (r * 77 + g * 150 + b * 29 + 128) / 256;
g = b = r;
img.setRGB(i, j, (r << 16) | (g << 8) | b);
}
}
}
}
//...
BufferedImage img = ImageIO.read(new File("in.png"));
gray.run(img);