- PR -

画像の領域を指定し保存

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2005/08/25
投稿数: 145
投稿日時: 2007-02-19 22:48
BMP(何でもいいのですが)である画像の範囲を指定して保存しようと
思っております。試行錯誤して一度ピクチャーボックスに描画してから
その範囲を指定して保存するしかないかと思い

Bitmap bmp = new Bitmap(96, 96);
pictureBox1.DrawToBitmap(bmp, new Rectangle(new Point(192, 85), new Size(96, 96)));
bmp.Save(@"ファイル名");

これだと画像が空といいますかふちが黒いだけの画像になってしまいます。
どのようにしたら指定して保存できるのでしょうか?
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-02-20 01:48
結論から言うとDrawToBitmapではできないようです。
私の方でも実験してみて、確かにうまくいかないなと思ったのですが、
いろいろ試してみたところ、第二引数のtargetBoundsで指定する矩形は
PictureBox側の矩形ではなく、第一引数のbitmapの中の矩形を意味するようです。
(つまり、描画元の原点はPictureBoxの(0,0)固定)

で、本題のBMPファイルの切り出しですが、
元ファイルのBMPファイルをロードしたBitmapオブジェクトがbmpSrcだとして、
以下のようにすれば切り出せると思います。

コード:

Bitmap bmp = new Bitmap(96, 96);
Graphics g = Graphics.FromImage(bmp)
g.DrawImage(bmpSrc, new Rectangle(0, 0, 96, 96), new Rectangle(192, 85, 96, 96), GraphicsUnit.Pixel);
bmp.Save(@"ファイル名");



Graphics.FromImageメソッド、Graphics.DrawImageメソッドの上記オーバーロード
をヘルプで調べてみてください。


[ メッセージ編集済み 編集者: よねKEN 編集日時 2007-02-20 01:49 ]
未記入
大ベテラン
会議室デビュー日: 2005/08/25
投稿数: 145
投稿日時: 2007-02-20 16:33
ありがとうございます。

教えていただいたGraphicsクラスを勉強させていただきました。

画像の範囲を指定して保存するのはBMPクラスだけでさくっといけるものかと
思いましたが、意外にてこづりました。
1

スキルアップ/キャリアアップ(JOB@IT)