Home > Software design >  Converting an array to image Java
Converting an array to image Java

Time:11-25

I would like to convert an array of pixels to images so that I can read each pixel of the image, I've converted the image to pixels and now what I'm trying to do is that I have a picture of an RGB circle , After converting the image to pixels I want to draw images again but Not the entire picture again , I want to draw the red circle alone , the green circle alone and the blue circle alone and store the images in a file , how can that be done ?

Here's the code that I used to convert the image to array pixels :

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.IOException;

public class BMPtoArray {
public static int[] convertToPixels(Image img) {
    int width = img.getWidth(null);
    int height = img.getHeight(null);
    int[] pixel = new int[width * height];

    PixelGrabber pg = new PixelGrabber(img, 0, 0, width, height, pixel, 0, width);
    try {
        pg.grabPixels();
    } catch (InterruptedException e) {
        throw new IllegalStateException("Error: Interrupted Waiting for Pixels");
    }
    if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
        throw new IllegalStateException("Error: Image Fetch Aborted");
    }
    return pixel;
}
public static void main(String[] args) throws IOException {
    BufferedImage image = ImageIO.read(new File("C:\\Users\\Mhamd\\Desktop\\3rd year 
first semester\\Analysis and Coding\\labs\\2.2Java\\src\\circleRGB.bmp"));
    //System.out.println(convertToPixels(image));
}
}

Here's the image :

RGBCirle

so this is basically what I'm trying to achieve

[![This is what I want to Achieve][2]][2]

CodePudding user response:

Here's a simple example of how to "turn off" the red channel:

final BufferedImage image = ImageIO.read(new File("test.bmp"));
int red = 0x00FF0000;
for (int row = 0; row < image.getHeight(); row  ) {
    for (int col = 0; col < image.getWidth(); col  ) {
        int color = image.getRGB(col, row);
        color &= ~red;
        image.setRGB(col, row, color);
    }
}

This sets the red in each RGB pixel to 0. You can repeat for other colors and combinations.

This produces this from your source image:

Picture of just the blue and green balls

  • Related