0

JavaのImageIOAPIについて少し助けが必要です。ComponentColorModelクラスで迷子になっているようです。* .pngファイルをピクセルごとにチェックして、グレースケールかカラー画像かを検出する必要があります。ただし、各ピクセルのR、G、B値を取得する方法がわかりません。誰か助けてもらえますか?

次のコードは、「m.getComponents(i、components、0);」の行を踏むときにIllegalArgumentExceptionをスローします。

ComponentColorModel m = (ComponentColorModel) imageTypeSpecifier.getColorModel();
   int pixels = reader.getWidth(0) * reader.getHeight(0);
   isGray = true;

   int[] components = new int[4];
   for (int i = 0; i < pixels; i++) {
      m.getComponents(i, components, 0);
      if (!(components[0] != components[1] || components[1] != components[2])) {
         isGray = false;
         break;
      }
   }
4

3 に答える 3

1

ImageIOを使用して画像を読み込む場合は、BufferedImageが必要です。BufferedImageはgetRGB(x、y)を直接提供しますが、それを単純に使用してColorModelを無視してみませんか?

于 2012-09-04T13:11:03.740 に答える
1

私自身の解決策:

BufferedImage buffImage = reader.read(0);
WritableRaster raster = buffImage.getRaster();
int[] colorsInPixel = new int[4];
isColor = false;

// check all pixels one by one
for (int i = 0; i < reader.getWidth(0) * reader.getHeight(0); i++) {
   raster.getPixel(i % reader.getWidth(0), i / reader.getHeight(0), colorsInPixel);
   if (colorsInPixel[0] != colorsInPixel[1] || colorsInPixel[1] != colorsInPixel[2]) {
      isColor = true;
   }
}
于 2012-09-05T09:54:10.677 に答える
0

コンポーネントモデルは以下を定義します。

public int getRGB(int pixel);
public int getRed(int pixel);
public int getGreen(int pixel);
public int getBlue(int pixel);
于 2012-09-04T11:51:40.307 に答える