Netbeans プラットフォームを使用して、Java Swing でデスクトップ アプリを作成しています。16 ビットのグレースケール画像を RGB 画像に変換したいと考えています。どうやってやるの?
6427 次
2 に答える
1
グレースケールは単一の値である黒で保持されますが、RBGは3つの値である赤、青、および緑で保持されます。getRGB(x, y)
これを使用して実行できる最善の方法は、BufferedImage
クラスのメソッドを使用して実行できる単色画像です。入力画像はグレースケールであるため、同じである必要があるため、そこから3つのカラー値のいずれかを取得できます。次に、モノクロのベースとして選択した色にその値を使用します。
これが赤の例です:
public BufferedImage changeToRedMonochrome(BufferedImage grayImage)
{
int width = grayImage.getWidth();
int height = grayImage.getHeight()
BufferedImage redImage = new BufferedImage(
width, height, BufferedImage.TYPE_INT_RGB);
for (int y=0; y<height; y++)
{
for (int x=0; x<width; x++)
{
Color grayColor = new Color(grayImage.getRGB);
int gray = grayColor.getRed();
int red = (gray > 127) ? 255 : gray/2;
int blue = (gray > 127 ? gray/2 : 0;
int green = (gray > 127 ? gray/2 : 0;
Color redColor = new Color(red, blue, green);
redImage.setRGB(x, y, redColor);
}
}
}
これは完璧なコードではありません。もちろん、特定のニーズに合わせて調整する必要がありますが、これは単色画像を作成する1つの方法です。
于 2012-06-27T12:47:07.207 に答える
1
Incompl で説明されている getRGB/setRGB メソッドが機能するはずです。しかし、私の記憶が正しければ、そのパフォーマンスはかなり貧弱です (これらのメソッドは、この場合不要な多くの作業を行います)。BufferedImage.TYPE_USHORT_GRAY
新しい画像を描画し、Java に からへの変換を最適化させると、はるかに高速になると思いますBufferedImage.TYPE_INT_RGB
。
int width = grayImage.getWidth();
int height = grayImage.getHeight()
BufferedImage newImage = new BufferedImage(
width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = newImage.getGraphics();
g.drawImage(grayImage, 0, 0, null);
g.dispose();
于 2012-06-27T14:25:49.460 に答える