画像を変更するプログラムを作成しました。BufferedImageに描画すると間違った色が表示されることがあります。
まず、私は、画像を取得し、次のようにその描画コンテキストを取得:
BufferedImage image;
try {
image = ImageIO.read(inputFile);
} catch (IOException ioe) { /* exception handling ... */ }
Graphics g = image.createGraphics();
そして私はこのように画像を変更します。
for (int x = 0; x < image.getWidth(); x++) {
for (int y = 0; y < image.getHeight(); y++) {
g.setColor(/* calculate color ... */);
g.fillRect(x, y, 1, 1);
}
}
私は画像の変更が完了した後私は次のように画像を保存します:
try {
ImageIO.write(image, "PNG", save.getSelectedFile());
} catch (IOException ioe) { /* exception handling ... */ }
ほとんどの場合、これは大丈夫です。私はこの
にこのテクスチャ
をrecoloringしようとしたとき
しかし、私はこの代わりに取得する:
しかし、デバッガの内部では、Graphics
の色はピンクの色合いです。
コメントは、ユーザーが開いた画像に色の制限がある可能性があります。私が読んでいる画像と同じ画像に描画しているので、私のプログラムはこれらの制限に従わなければなりません。サンプル画像はかなりグレースケールのようですが、明らかにビット深度は8ビットです。それで、画像が8ビットのままでなければならないので、私が描いているピンクはグレースケールに変換されるでしょうか?
これを再現することができるセットアップ(つまり、[MCVE]と画像の例)を提供する機会はありますか? – Marco13
色のモデルが使用している色をサポートしていない可能性があります – MadProgrammer
@ Marco13私の質問に例を追加しました。 – JoFelix