Java: Get the RGBA from a Buffered Image as an Array of Integer

…衆ロ難τιáo~ 提交于 2019-12-02 20:15:52

问题


Given an image file, say of PNG format, how to I get an array of int [r,g,b,a] representing the pixel located at row i, column j?

So far I am starting here:

private static int[][][] getPixels(BufferedImage image) {

    final byte[] pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
    final int width = image.getWidth();
    final int height = image.getHeight();

    int[][][] result = new int[height][width][4];

    // SOLUTION GOES HERE....
}

Thanks in advance!


回答1:


You need to get the packed pixel value as an int, you can then use Color(int, boolean) to build a color object from which you can extract the RGBA values, for example...

private static int[][][] getPixels(BufferedImage image) {
    int[][][] result = new int[height][width][4];
    for (int x = 0; x < image.getWidth(); x++) {
        for (int y = 0; y < image.getHeight(); y++) {
            Color c = new Color(image.getRGB(i, j), true);
            result[y][x][0] = c.getRed();
            result[y][x][1] = c.getGreen();
            result[y][x][2] = c.getBlue();
            result[y][x][3] = c.getAlpha();
        }
    }
}

It's not the most efficient method, but it is one of the simplest




回答2:


BufferedImages have a method called getRGB(int x, int y) which returns an int where each byte is the components of the pixel (alpha, red, green and blue). If you dont want to do the bitwise operators yourself you can use Colors.getRed/Green/Blue methods by creating a new instance of Java.awt.Color with the int from getRGB.

You can do this in a loop to fill the three-dimensional array.




回答3:


This is my code for this problem:

 File f = new File(filePath);//image path with image name like "lena.jpg"
 img = ImageIO.read(f);

 if (img==null) //if img null return
    return;
 //3d array [x][y][a,r,g,b]  
 int [][][]pixel3DArray= new int[img.getWidth()][img.getHeight()][4];
     for (int x = 0; x < img.getWidth(); x++) {
         for (int y = 0; y < img.getHeight(); y++) {

            int px = img.getRGB(x,y); //get pixel on x,y location

            //get alpha;
            pixel3DArray[x][y][0] =(px >> 24)& 0xff; //shift number and mask

            //get red
            pixel3DArray[x][y][1] =(px >> 16)& 0xff;


            //get green
            pixel3DArray[x][y][2] =(px >> 8)& 0xff;

            //get blue
            pixel3DArray[x][y][3] =(px >> 0)& 0xff;

         }
    }


来源:https://stackoverflow.com/questions/27537867/java-get-the-rgba-from-a-buffered-image-as-an-array-of-integer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!