- - PR -
bitbltで描画したいのですが・・・。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-06-25 12:05
現在C#で、顧客及び取り扱い商品の情報を管理する
Windowsアプリケーションを作成しているのですが、 pictureBoxに表示してある取り扱い商品の画像の一部を切り出し 高速に他のpictureBoxに貼り付ける必要が出てきました。 切り出す部分が多いため、bitbltを使って転送しようと思ったのですが、 pictureBoxのデバイスコンテキストハンドルが取得できなくて困っています。 (VBの時は簡単に出来たのですが、C#はつい最近使い始めたもので) .netでありながらAPIを使うのは如何なものかという意見もあるかと思いますが、 なにとぞご教授お願いいたします。 | ||||
|
投稿日時: 2005-06-25 12:35
PictureBox の DC から切り出すと、PictureBox が他のウィンドウに隠されている時や画面外に出ている部分などが期待通りに切り出せませんが、それでもいいのですか? PictureBox からは PictureBox.Image.GetHBitmap() で HBITMAP を取得し、別途 CreateDC() で作成した DC に PictureBox から取得した HBITMAP をSelectObject() して BitBlt() するのが、順当な操作と思います。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||
|
投稿日時: 2005-06-26 21:23
渋木様、早速のご回答ありがとうございます。
他のウィンドウに隠れている場合や、画面外に出ている部分などは厳しいみたいですが、 とりあえず試してみます。 もし、画面外に出ている部分などを切り出すには、 Bitmap bmap = new Bitmap(@"C:\test.bmp"); のように読み込んだBitmapオブジェクトから転送すれば出来るのでしょうか? (自宅には開発環境が無いもので試せていません・・・) よろしければ、再度ご回答の程お願いいたします。 | ||||
|
投稿日時: 2005-06-26 22:23
既に回答しているので、よく読み返してみてください。 PictureBox が隠されている時などに対応していないのは、元々のあなたのアイデアである「PcitureBox の DC を取得し、その DC に選択されている HBITMAP を使用する」時の話です。 PictureBox.Image.GetHBitmap() で「PictureBox が保持している Image から HBITMAP が取得」すれば、PictureBox が隠されているかどうかは関係ありません。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||
|
投稿日時: 2005-06-27 12:42
渋木様、大変失礼いたしました。
おかげさまで、目的を達することが出来ました。 仕事上で使用しているため、コードを記す事が出来ませんが、 機会を改めて、簡素化したコードを開示したいと思います。 (利用する人は少ないと思いますが・・・) 本当にありがとうございました。 |
1