0

画像が白黒画像なのか、カラーがあるのか​​ (Java を使用) を判断しようとしています。色がある場合は、色が失われるという警告メッセージをユーザーに表示する必要があります。

私への提案はありますか?

4

2 に答える 2

1

ImageIO を使用すると、他の誰かが述べたように、イメージをロードできます。

多くの場合に役立つ最適化が可能です。画像が最初からグレースケールである場合、ファイル形式に「これはグレースケール画像です」と表示img.getColorModel().getColorSpace()されている場合、その画像を使用して検出することができます。色空間にはグレーの陰影のみが含まれます。

インデックス付きカラー パレット (たとえば、GIF ファイル) の場合、カラー モデル内のすべての色を反復処理して、色があるかどうかをすばやく判断できます (赤/緑/青の値が同じ場合、色はありません)。

残りの部分については、画像からピクセルをサンプリングする必要があります (色に遭遇する前に黒/白/グレーの境界線に多くの時間を費やさないように、いくつかのパターンを使用して位置間をスキップする画像を歩きます)。何かのようなもの

Color c = new Color(img.getRGB(x,y));
boolean isGray = c.getRed() == c.getGreen() && c.getRed() == c.getBlue();
...

画像のサイズによっては、画像のすべてのピクセルを繰り返し処理して、色付きのピクセルが 1 つでも存在するかどうかを検出するのはコストがかかりすぎる場合があります。また、何らかの色があると仮定して、常にユーザーに警告することをお勧めします。

于 2013-10-23T07:19:30.127 に答える
1

可能です。ImageIO で画像を読み込むことができます。

BufferedImage img = ImageIO.read(imageFile);
int rgb = img.getRGB(x,y);
Color color = new Color(rgb);

ただし、x、y 境界を見つけて各位置の色をチェックするアルゴリズムを作成する必要があります。

于 2013-10-23T07:00:19.607 に答える