1

Netbeans プラットフォームを使用して、Java Swing でデスクトップ アプリを作成しています。16 ビットのグレースケール画像を RGB 画像に変換したいと考えています。どうやってやるの?

4

2 に答える 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 に答える