访问图像的像素

时间:2010-02-06 19:08:20

标签: java swing

有人可以在这里告诉我如何访问图像的所有像素,以便能够构建该图像的直方图吗?

3 个答案:

答案 0 :(得分:4)

您可以使用

java.awt.image.BufferedImage image = ImageIO.read( "image.gif" );
int[] samples = image.getData().getPixel( x, y, null );

// or the pixel converted to the default RGB color model:
int rgb = image.getRGB( x, y )

我认为你从那里获得的samples是RGB值,但你必须检查......

答案 1 :(得分:1)

如果您可以使用JAI,则可以选择生成Histograms

答案 2 :(得分:1)

这里有一些可能有用的示例代码 - 请测试一下(它似乎适用于我,但你永远不会知道!)。

这个直方图在这里没有均衡或任何东西,只是按字面计算每个频段中特定值的像素。

我相信乐队(你需要检查)按顺序是R,G,B + Alpha。

import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.io.File;
import javax.imageio.ImageIO;

public class SimpleImageReader {


public static void main(String[] args) throws Exception {
       // File f=new File(args[0]);
        File f=new File("C:\\1.jpg");
        BufferedImage img = ImageIO.read(f);
        Raster r=img.getData();
        int levels=256;
        int bands=r.getNumBands();
        int histogram[][]=new int[bands][levels]; 

        for (int x=r.getMinX();x<r.getWidth();x++) {
            for (int y=r.getMinY();y<r.getHeight();y++) {
                for (int b=0;b<3;b++) {
                    int p=r.getSample(x, y, b);
                    histogram[b][p]++;
                }
            }
        }
      for (int b=0;b<histogram.length;b++) {
        System.out.println("Band:"+b);
        for (int i=0;i<histogram[b].length;i++) {
          System.out.println("\t"+i+"="+histogram[b][i]);
        }
       }
}
}