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

画像描画について。

環境/言語:[C#]
分類:[.NET]

Image img = image;
int imgWidth = img.Width;
int imgHeight = img.Height;
Rectangle rect = new Rectangle(0, 0, imgWidth, imgHeight);
PictureBox pic = new PictureBox();
pic.Image = new Bitmap(img.Width, img.Height);

Graphics gg = Graphics.FromImage(pic.Image);
gg.DrawImage(img, 0, 0, rect, GraphicsUnit.Pixel)
gg.Dispose();

>>gg.DrawImage(img, 0, 0, rect, GraphicsUnit.Pixel)
GraphicsUnit.PixelPointのところをGraphicsUnit.Point
にすると実装されませんでしたとエラーメッセージがでて
落ちてしまいます。Pointにすることができないのでしょうか??
おしえてください。
DrawImageはGraphicsUnit.Pixelしか使えないのではないかと思います。結局自分で計算することになるのではないでしょうか。
■No7711に返信(管理人さんの記事)
> DrawImageはGraphicsUnit.Pixelしか使えないのではないかと思います。結局自分で計算することになるのではないでしょうか。

現在Imageクラスを使用して画像の分割をしていますが、
Metafileクラスをしようして画像の分割は可能でしょうか??
教えてください。
#はじめの質問と内容が変わっています。別の質問をするときは、新しいスレッドを作成するようにしてください。

> 現在Imageクラスを使用して画像の分割をしていますが、
> Metafileクラスをしようして画像の分割は可能でしょうか??

まず、「分割」の意味が分かりません。画像の一部を切り取るという意味でいいのでしょうか?

また、Imageクラスは抽象クラスですので、「Imageクラスを使用して...」という意味が分かりませんし、MetafileクラスはImageクラスの派生クラスですので、さらに意味が不明です。

どのようなコードを書いて失敗したのか、具体的に書いていただけますか?
勉強不足ですみません。

private void CreateImage(Metafile metafile)
{
 PictureBox pic = new PictureBox();
 pic.Image = metafile;
 Graphics gg = Graphics.FromImage(pic.Image);
 RectangleF rect = new RectangleF(50, 50, 300, 200);
 gg.DrawImage(metafile, 0, 0, rect,GraphicsUnit.Pixel);
 gg.Dispose();
}
です。
 Graphics gg = Graphics.FromImage(pic.Image);
のところで”メモリー不足です”と表示されおちてしまいます。
オーシャンさんのコードが何をしているものなのか分かりませんが、少なくとも画像の分割を行っているようには見えません。なぜわざわざPictureBox.Imageにmetafileをいれ、FromImageを呼び出しているのか理解できません(PictureBoxのインスタンスを作成している意味も分かりません)。

よってなぜエラーがでたのかについて説明するのも無駄のような気がしますが、たぶんMetafileのインスタンスを作成するときにコンストラクタに「デバイスコンテキストを識別するハンドル」を指定しなかったからだと思います。これを指定してインスタンスを作成しなければ、Graphicsを取得して画像に描画することはできません。
全然初心者なので意味わからないことをかいてしまいすみません。
ではどのようにMetafileを使用して画像の一部を切り取って表示すればいいのでしょうかおしえてください。
■No7805に返信(オーシャンさんの記事)
> 全然初心者なので意味わからないことをかいてしまいすみません。
> ではどのようにMetafileを使用して画像の一部を切り取って表示すればいいのでしょうかおしえてください。

オーシャンさんは私が意地悪をしてわざと回りくどい言い方をしているのではないかと思われているのかもしれませんが、私はそれほど暇ではなく、本当にオーシャンさんが何をしたいのかはっきりと理解できないのです。

まだ不明な点はあるのですが、想像するに、次のようなメソッドを作りたいのではないでしょうか。違っているかもしれませんが、後はお任せします。

private Bitmap CreateImage(Metafile metafile)
{
  Rectangle rect = new Rectangle(50, 50, 300, 200);
Bitmap bmp = new Bitmap(rect.Width, rect.Height);
  Graphics gg = Graphics.FromImage(bmp);
  gg.DrawImage(metafile, 0, 0, rect, GraphicsUnit.Pixel);
  gg.Dispose();

return bmp;
}

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