Нужно сделать градацию серого. - 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);

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы