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

PictureBoxの領域にBitBlt等で転送された画像を取り出す

分類:[.NET]

ちょっと困っています.途中の理解に誤りがあればご指摘ください.

(質問)
PictureBoxの領域にBitBlt等で転送された画像をPictureBox経由で
取得できないでしょうか?

やりことは,

Bitmap bmp0 = new Bitmap(PictureBox.Image, PictureBox.Width, PictureBox.Height)
Color Col = bmp0.GetPixel(i,j) 'i,jはPictureBox上の座標

としてピクセル値を取得したいのですが...
PictureBox.Imageに目的の画像がセットできれば可能であると思っていますが
方法が思いつきません.

皆様お知恵をおかしください.
こんばんは、やんpさん。ピラルクです。

この手順でどうでしょう?

Bitmap bmp0 = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.Image = bmp0;

Graphics gPicture = Graphics.FromImage(pictureBox1.Image);
IntPtr hdcPicture = gPicture.GetHdc();

BitBlt(hdcPicture, ……);

gPicture.ReleaseHdc(hdcPicture); //これが大切

Color col = bmp0.GetPixel(i, j);

pictureBox1.Refresh();

 亀レスで申し訳ありません.やんpです.
うーむ.うまくいきません.
VC++で作成したdllを呼び出して(中でBitBltで描画しています.)

Dim hDC as IntPtr = GetDC(Picturebox1.Handle)
でハンドル準備してやっているのですが.
以下のコードはVB.NETに書き直して実行はしておりますが,動画像に
対して,裏にあるPictureboxの絵ばかり引っ張ってきます.なぜか...

■No712に返信(ピラルクさんの記事)
> こんばんは、やんpさん。ピラルクです。
> > この手順でどうでしょう?
> > Bitmap bmp0 = new Bitmap(pictureBox1.Width, pictureBox1.Height);
> pictureBox1.Image = bmp0;
> > Graphics gPicture = Graphics.FromImage(pictureBox1.Image);
> IntPtr hdcPicture = gPicture.GetHdc();
> > BitBlt(hdcPicture, ……);
> > gPicture.ReleaseHdc(hdcPicture); //これが大切
> > Color col = bmp0.GetPixel(i, j);
> > pictureBox1.Refresh();
こんにちは、やんpさん。ピラルクです。

"VC++で作成したdll"がからむと、どうなるかは私には
わかりません。最悪、.NET側でもう一度BitBltさせて
.net側で生成したBitmapに転送させれば取得できるとは
思いますが、非同期な動画なら無理があるかも。

こんにちは.やんpです.

> > "VC++で作成したdll"がからむと、どうなるかは私には
> わかりません。最悪、.NET側でもう一度BitBltさせて
> .net側で生成したBitmapに転送させれば取得できるとは
> 思いますが、非同期な動画なら無理があるかも。

ですねー.dll側は私作成しておりますが,それを使われている
.NET使いの方が画像が取得できないと困ってらっしゃいました.
VB.NET側でThread立ててdllを駆動しておりますので,なかなか
深い問題があるのかもしれません.
いろいろありがとうございました.静止画を取得できるdllの
提供で代替してみます.

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