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

PictureBox の hDC を取得したい

分類:[.NET]

初めて掲示板を使わせていただきます、VB.NET初心者の『やま』と申します。
宜しくお願いします。

以前に、どこかのサイトで(URLを忘れてしまいました)、APIを使って PictureBox のイメージを高速で配列変数に入れるVB6用のサンプルがありまして、長らく使わせて頂いたのですが、今回、VB.NETにアップグレードしましたら PictureBox の hDC がVB.NETでなくなっており、使えなくて困っています。

PictureBox の hDC が取れれば動くかなと思っているのですが、hDC の取得の方法がわかりません。

申し訳ありませんが、ご存知でしたら教えていただきたいのですが?

VB6用のサンプルでは、
CreateDIBitmap(),GetDIBits(),SetDIBits(),SelectObject()
などのAPIを使っています。
> PictureBox の hDC が取れれば動くかなと思っているのですが、hDC の取得の方法がわかりません。

Graphics.FromHwndメソッドでPictureBox.HandleからGraphicsオブジェクトを取得し、
そのGraphicsオブジェクトのGetHdcメソッドでhDCを取得できます。

> CreateDIBitmap(),GetDIBits(),SetDIBits(),SelectObject()

APIを使わずともBitmapオブジェクトを利用すればいいのではないでしょうか?

下記にBitmapオブジェクトを使用した色の反転とグレースケールをしている例があります。

「KEN's .NET」
http://www5b.biglobe.ne.jp/~yone-ken/
この中の「[メモ] VB.NETに関するメモ書き 」の「23:[ 画像処理 ] 」のソースコード
■No779に返信(よねKENさんの記事)

よねKENさん。早々の返信有難うございます。


>>PictureBox の hDC が取れれば動くかなと思っているのですが、hDC の取得の方法がわかりません。
>
> Graphics.FromHwndメソッドでPictureBox.HandleからGraphicsオブジェクトを取得し、
> そのGraphicsオブジェクトのGetHdcメソッドでhDCを取得できます。

勉強不足で申し訳ありません。HELPを見ながら下記のように書いたのですが、GetHdc にたどりつきません。間違いを指摘していただきたいのですが。

Dim hwnd As New IntPtr
hwnd = PictureBox1.Handle
Dim g As Graphics = Graphics.FromHwnd(hwnd)
 この後に、hDC を取得するのだと思ったのですが、よく判りません。

>
>>CreateDIBitmap(),GetDIBits(),SetDIBits(),SelectObject()
>
> APIを使わずともBitmapオブジェクトを利用すればいいのではないでしょうか?
>
> 下記にBitmapオブジェクトを使用した色の反転とグレースケールをしている例があります。
>
> 「KEN's .NET」
> http://www5b.biglobe.ne.jp/~yone-ken/
> この中の「[メモ] VB.NETに関するメモ書き 」の「23:[ 画像処理 ] 」のソースコード
>

中身はよくわからないのでが、私がやりたいことと同じような気がします。hDC が取得できましたらば、是非参考とさせていただきたいと思います。
APIを使っているのは、処理速度の問題でして、処理速度が速いのでしたらば色々試してみたいと考えています。

それと、返信の方法なのですが、Comment/ の下のボックスの内容に直接追加しているのですが、これで宜しいのでしょうか?
■No781に返信(やまさんの記事)
> それと、返信の方法なのですが、Comment/ の下のボックスの内容に直接追加しているのですが、これで宜しいのでしょうか?

それで結構です。一応この掲示板はツリー表示も出来るので、返信先の記事を明確にしたい時は、その記事の「引用返信」をクリックしてください。
> 勉強不足で申し訳ありません。HELPを見ながら下記のように書いたのですが、GetHdc にたどりつきません。間違いを指摘していただきたいのですが。
>
> Dim hwnd As New IntPtr
> hwnd = PictureBox1.Handle
> Dim g As Graphics = Graphics.FromHwnd(hwnd)
>  この後に、hDC を取得するのだと思ったのですが、よく判りません。

この後に
Dim hdc As IntPtr = g.GetHdc()
とするだけだと思います。
■No792に返信(よねKENさんの記事)
>>勉強不足で申し訳ありません。HELPを見ながら下記のように書いたのですが、GetHdc にたどりつきません。間違いを指摘していただきたいのですが。
>>
>>Dim hwnd As New IntPtr
>>hwnd = PictureBox1.Handle
>>Dim g As Graphics = Graphics.FromHwnd(hwnd)
>> この後に、hDC を取得するのだと思ったのですが、よく判りません。
>
> この後に
> Dim hdc As IntPtr = g.GetHdc()
> とするだけだと思います。
>

有難うございます。hDC が取れました。
VB.NETのエディタの入力候補に、GetHdc() が無かったので使えないのかなと思っていたのですが、直接、エディタに .GetHdc() と書込み実行したところ hDC が取れていました。

エディタの入力候補に出てこないメソッドやプロパティがあるのですね!知りませんでした。

それと、教えて頂いたソースコードですが、実行してみたところ中々速いですね。APIとの速度の比較をして、速い方を使いたいと思います。


今回、助けて頂きまして有難うございます。また何かありましたらば宜しくお願いします。
解決済み!

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