FC2ブログ

インデックス付きの画像からグラフィックオブジェクトを作成する[むー]

C#
04 /20 2009
『インデックス付きのピクセル形式をもつイメージからグラフィックス オブジェクトを作成することはできません』なるエラーが出る時の対処方法。


■駄目なパターン■
Bitmap bmp = new Bitmap(FilePath);
Graphics g = Graphics.FromImage(bmp);



■改善版■
Bitmap src = new Bitmap(FilePath);
Bitmap Bmp = new Bitmap(src.Width, src.Height);
Graphics g = Graphics.FromImage(Bmp);
g.DrawImage(src, 0, 0, src.Width, src.Height);
src.Dispose();



先にグラフィックオブジェクトを欲しいサイズで作っておいて、
そこへあらかじめ読み込んだイメージをコピーする事で、
読み込み元のイメージフォーマットを無視する事が出来る。


■応用■
Bitmap src = new Bitmap(FilePath);
Bitmap Bmp = new Bitmap(src.Width, src.Height, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(Bmp);
g.DrawImage(src, 0, 0, src.Width, src.Height);
src.Dispose();


このように、読み込み元のフォーマットにかかわらず、
指定のフォーマットに変更することも可能。


※using使うとdisposeが減らせるらしい
Bitmap destImage = new Bitmap(size);
using (Bitmap srcImage = new Bitmap(filename))
using (Graphics destGraphics = Graphics.FromImage(destImage))
{
destGraphics.DrawImage(srcImage, Rectangle, Rectangle);
}
destImage.Save(filename, format);

======================================
Bitmap destImage = new Bitmap(100,100);
using (Bitmap srcImage = new Bitmap(@"filename.PNG"))
using (Graphics destGraphics = Graphics.FromImage(destImage))
destGraphics.DrawImage(srcImage, dstRect,0,0,100,100,GraphicsUnit.Pixel);
destImage.Save(@"filename.PNG", ImageFormat.Png);
destImage.Dispose();

コメント

非公開コメント