如何使用 Raster 读取 WritableImage 的每个像素?

How can I read every pixel of a WritableImage with Raster?

我必须编写一个方法:

  1. 创建直方图
  2. 从灰度图像中读取所有像素值(可变宽度和高度)
  3. 填充直方图

我该怎么做?我写了一些代码,但我陷入了僵局。

public histogram(BufferedImage image){
    WritableRaster writableRaster = image.getRaster();

    int width = image.getWidth();
    int height = image.getHeight();

    int pixelValue;

    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) {
            pixelValue = writableRaster.setDataElements(x, y, width, height, );
        }
    }
} 

以下代码片段应该有所帮助:

    Raster raster = image.getRaster();
    int numBands = raster.getSampleModel().getNumBands();

    int width = image.getWidth();
    int height = image.getHeight();

    for (int y = 0; y < height; y++) {
      for (int x = 0; x < width; x++) {
        int[] pixelValue = new int[numBands];
        raster.getPixel(x, y, pixelValue);
      }
    }

如果您真的有一张没有 alpha 的灰度图像,SampleModel 将只包含一个波段。在这种情况下,pixelValue 数组将包含您想要的 int 值。您只需添加一个包含 256 个 int 值的直方图数组,并增加像素值索引处的值。