- PR -

bitbltで描画したいのですが・・・。

1
投稿者投稿内容
波乗り熊
会議室デビュー日: 2005/06/25
投稿数: 3
投稿日時: 2005-06-25 12:05
現在C#で、顧客及び取り扱い商品の情報を管理する
Windowsアプリケーションを作成しているのですが、
pictureBoxに表示してある取り扱い商品の画像の一部を切り出し
高速に他のpictureBoxに貼り付ける必要が出てきました。
切り出す部分が多いため、bitbltを使って転送しようと思ったのですが、
pictureBoxのデバイスコンテキストハンドルが取得できなくて困っています。
(VBの時は簡単に出来たのですが、C#はつい最近使い始めたもので)
.netでありながらAPIを使うのは如何なものかという意見もあるかと思いますが、
なにとぞご教授お願いいたします。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-06-25 12:35
引用:

切り出す部分が多いため、bitbltを使って転送しようと思ったのですが、
pictureBoxのデバイスコンテキストハンドルが取得できなくて困っています。



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/25
投稿数: 3
投稿日時: 2005-06-26 21:23
渋木様、早速のご回答ありがとうございます。
他のウィンドウに隠れている場合や、画面外に出ている部分などは厳しいみたいですが、
とりあえず試してみます。
もし、画面外に出ている部分などを切り出すには、
Bitmap bmap = new Bitmap(@"C:\test.bmp");
のように読み込んだBitmapオブジェクトから転送すれば出来るのでしょうか?
(自宅には開発環境が無いもので試せていません・・・)
よろしければ、再度ご回答の程お願いいたします。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-06-26 22:23
引用:

もし、画面外に出ている部分などを切り出すには、
Bitmap bmap = new Bitmap(@"C:test.bmp");
のように読み込んだBitmapオブジェクトから転送すれば出来るのでしょうか?



既に回答しているので、よく読み返してみてください。

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/25
投稿数: 3
投稿日時: 2005-06-27 12:42
渋木様、大変失礼いたしました。
おかげさまで、目的を達することが出来ました。
仕事上で使用しているため、コードを記す事が出来ませんが、
機会を改めて、簡素化したコードを開示したいと思います。
(利用する人は少ないと思いますが・・・)

本当にありがとうございました。
1

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