グレースケール画像をカラー画像に変換したい
Visual studio 2019 Widowsフォームアプリケーションでグレースケールの画像を輝度値を基に疑似カラー画像に変換したいと思い、(https://imagingsolution.net/program/csharp/setcolorpalette/)こちらのサイトから(疑似カラー画像の項目)コードを拝借しまして画像を変換しようとしたところコード自体にエラーはなかったのですが、下記のように色を設定する箇所で例外が発生してしまい、プログラムが実行できない状態となりました。調査はしておりますが原因が依然特定できておりません。何か間違いがあれば御指摘願えないでしょうか?
宜しくお願い致します。
発生している問題・エラーメッセージ
pal.Entries[i] = System.Drawing.Color.FromArgb(r, g, b); ↑ 型 'System.IndexOutOfRangeException' のハンドルされていない例外が image.exe で発生しました インデックスが配列の境界外です。
該当のソースコード
public void SetPalettePseudoColor(Bitmap bmp) { var pal = bmp.Palette; int r, g, b; // 疑似カラー for (int i = 0; i < 52; i++) { r = 0; g = (int)((Math.Cos(Math.PI * (i * 900 / 255.0 - 180) / 180.0) + 1) * 110.0); b = 255; pal.Entries[i] = System.Drawing.Color.FromArgb(r, g, b); } for (int i = 52; i < 102; i++) { r = 0; g = 220; b = (int)((Math.Cos(Math.PI * (i * 900 / 255.0 - 180) / 180.0) + 1) * 127.5); pal.Entries[i] = System.Drawing.Color.FromArgb(r, g, b); } for (int i = 102; i < 154; i++) { r = (int)((Math.Cos(Math.PI * (i * 900 / 255.0 - 180) / 180.0) + 1) * 127.5); g = 220; b = 0; pal.Entries[i] = System.Drawing.Color.FromArgb(r, g, b); } for (int i = 154; i < 204; i++) { r = 255; g = (int)((Math.Cos(Math.PI * (i * 900 / 255.0 - 180) / 180.0) + 1) * 110.0); b = 0; pal.Entries[i] = System.Drawing.Color.FromArgb(r, g, b); } for (int i = 204; i < 256; i++) { r = 255; g = 0; b = (int)((Math.Cos(Math.PI * (i * 900 / 255.0 - 180) / 180.0) + 1) * 127.5); pal.Entries[i] = System.Drawing.Color.FromArgb(r, g, b); } // カラーパレットの設定 bmp.Palette = pal; } using (var bmp = new Bitmap(img)) { SetPalettePseudoColor(bmp); bmp.Save(@"D:\sources\new4.jpg"); }
試したこと
8bit画像、32bit画像で試しておりますがどちらも同様のエラーとなりました。
色を格納する配列に過大な値が格納されたものと思われます。
回答1件
あなたの回答
tips
プレビュー