DOBON.NET DOBON.NETプログラミング掲示板過去ログ

bmp編集?(しきい値の設定)

環境/言語:[環境:WindowsXP 言語:C# .Net Framework1.1]
分類:[.NET]

いつもどぼんさんにはお世話になっています。

現在 bmpファイルのしきい値を変更して再保存の方法を模索しています。
添付のbmpファイルを利用して以下の様にコーディングしてみたのですが、
-----
Image mImage = Image.FromFile("c:\\aaa.bmp");
Graphics g = Graphics.FromImage(mImage);
System.Drawing.Imaging.ImageAttributes attr =
new .Drawing.Imaging.ImageAttributes();
attr.SetThreshold(200 / 255,
System.Drawing.Imaging.ColorAdjustType.Bitmap);
mImage.Save("c:\\bbb.bmp");
------
GRAPHICSオブジェクトを作成しようとした所、
HResult 0x80131500
Message インデックス付きのピクセル形式をもつイメージから
Graphics オブジェクトを作成することはできません。
と例外が発生してしまいます。

Save()メソッドの辺りもおかしい気かしますし、初心者な質問で申し訳ありませ
んが、ご教授ください。
(この記事にはファイル"bbb.lzh"が添付されていましたが、削除されました。)
> GRAPHICSオブジェクトを作成しようとした所、
> HResult 0x80131500
> Message インデックス付きのピクセル形式をもつイメージから
> Graphics オブジェクトを作成することはできません。
> と例外が発生してしまいます。

VS.NETのヘルプで、Graphics.FromImage()メソッドの項を見ると、
----------------------------------------------------------
イメージがインデックス付きのピクセル形式の場合、このメソッドは
"インデックス付きのピクセル形式をもつイメージから Graphics
オブジェクトを作成することはできません。" というメッセージと
共に例外をスローします。インデックス付きのピクセル形式の一覧を
次に示します。
・・・
----------------------------------------------------------
とあります。
元のbmpファイルに対してGraphics.FromImage()ができない場合、
次のような方法はどうでしょうか?

// 元ファイルのオープン
Bitmap bmpOld = new Bitmap(元bmpファイル名);

// 元ファイルと同じサイズで新規にbmpを作成。
// Graphicsオブジェクトを作成し、
// ImageAttributesを設定して描画。
Bitmap bmpNew = new Bitmap(bmpOld.Width, bmpOld.Height);
Graphics g = Graphics.FromImage(bmpNew);
Rectangle rect = new Rectangle(0, 0, bmpNew.Width, bmpNew.Height);
System.Drawing.Imaging.ImageAttributes attr
 = new System.Drawing.Imaging.ImageAttributes();
attr.SetThreshold(
 (200f / 255f),
 System.Drawing.Imaging.ColorAdjustType.Bitmap);
g.DrawImage(
 bmpOld,
 rect,
 0,
 0,
 bmpOld.Width,
 bmpOld.Height,
 GraphicsUnit.Pixel,
 attr);

// 新規bmpを保存。
bmpNew.Save(
 新bmpファイル名,
 System.Drawing.Imaging.ImageFormat.Bmp);
> VS.NETのヘルプで、Graphics.FromImage()メソッドの項を見ると、
> ----------------------------------------------------------
> イメージがインデックス付きのピクセル形式の場合、このメソッドは
> "インデックス付きのピクセル形式をもつイメージから Graphics
> オブジェクトを作成することはできません。" というメッセージと
> 共に例外をスローします。インデックス付きのピクセル形式の一覧を
> 次に示します。
> ・・・
> ----------------------------------------------------------
> とあります。

ありがとうございます。
ただ、私の環境のヘルプではそこまでの情報が載ってませんでした。
■No3876に返信(NowhereManさんの記事)
> 元のbmpファイルに対してGraphics.FromImage()ができない場合、
> 次のような方法はどうでしょうか?
>
> // 元ファイルのオープン
> Bitmap bmpOld = new Bitmap(元bmpファイル名);
>
> 中略
>
> // 新規bmpを保存。
> bmpNew.Save(
>  新bmpファイル名,
>  System.Drawing.Imaging.ImageFormat.Bmp);

なるほど、元ファイルを元に新たにBMPを作成する... 目から鱗でした。
思い通りの結果を得る事ができました。
こんなに早く解決しようとは思っても見ませんでした。
どうもありがとうございました。
解決済みにするのを忘れていました。

ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板