Dim bmp_x = New Bitmap(340, 375) Dim gra_x As Graphics = Graphics.FromImage(bmp_x)
Dim hdc_x As IntPtr = gra_x.GetHdc Dim web_x As IntPtr = _ System.Runtime.InteropServices.Marshal.GetIUnknownForObject(WebBrowser1.ActiveXInstance) Dim rect_x As Rectangle = New Rectangle(0, 0, 340, 375)
PictureBox2.SizeMode = PictureBoxSizeMode.StretchImage PictureBox2.Image = bmp_x Dim srcRect_x As New Rectangle((0, 0, 340, 375) Dim desRect_x As New Rectangle(270, 0, 610, 375)
Dim gra3 As Graphics = Graphics.FromImage(bmp2) gra3.DrawImage(bmp_x, srcRect_x, desRect_x, GraphicsUnit.Pixel) gra3.Dispose()
分類:[.NET]
【解決したい問題】
ウェブブラウザ(IE)に表示された画面をキャプチャしようと
考えています。キャプチャ方法を調べてみると、画面を非表示に
して、ブラウザの画面=表示する画面に設定して、一度でキャプ
チャする方法はありましたが、ブラウザ画面は固定で、分割して
キャプチャし、それを結合した画像を作成したいと思っています。
その画像を利用して、用意した小さな画像と一致している場所を
調べて、そのブラウザをスクロールなどさせて、合致している場
所にポイントしたいというのが理由です。
そこで、分割してキャプチャし、結合しようとしているのですが、
うまく結合できません。
何か根本的な間違いを犯しているのでしょうか。
【解決するために何をしたか】
ロジックを分解し、座標などを全部定数で直接指定してデバッグ
してみましたが、原因がわかりません。
テストした時の状況は以下の通りです。
ブラウザの大きさ=610x375
展開されたサイト自体の画像の大きさ=950x375
以下がそのソースです。
Dim bmp2 As New Bitmap( _
WebBrowser1.Document.Body.ScrollRectangle.Width, _
WebBrowser1.Document.Body.ScrollRectangle.Height)
Dim bmp As New Bitmap(610, 375)
Dim gra As Graphics = Graphics.FromImage(bmp)
Dim hdc As IntPtr = gra.GetHdc
Dim web As IntPtr = _
System.Runtime.InteropServices.Marshal.GetIUnknownForObject(WebBrowser1.ActiveXInstance)
Dim rect As Rectangle = New Rectangle(0, 0, 610, 375)
OleDraw(web, DVASPECT_CONTENT, hdc, rect)
System.Runtime.InteropServices.Marshal.Release(web)
gra.Dispose()
Dim srcRect As New Rectangle(0, 0, 610, 375)
Dim desRect As New Rectangle(0, 0, 610, 375)
Dim gra2 As Graphics = Graphics.FromImage(bmp2)
gra2.DrawImage(bmp, srcRect, desRect, GraphicsUnit.Pixel)
gra2.Dispose()
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
PictureBox1.Image = bmp
WebBrowser1.Document.Window.ScrollTo(610, 0)
Dim bmp_x = New Bitmap(340, 375)
Dim gra_x As Graphics = Graphics.FromImage(bmp_x)
Dim hdc_x As IntPtr = gra_x.GetHdc
Dim web_x As IntPtr = _
System.Runtime.InteropServices.Marshal.GetIUnknownForObject(WebBrowser1.ActiveXInstance)
Dim rect_x As Rectangle = New Rectangle(0, 0, 340, 375)
OleDraw(web_x, DVASPECT_CONTENT, hdc_x, rect_x)
System.Runtime.InteropServices.Marshal.Release(web_x)
gra_x.Dispose()
PictureBox2.SizeMode = PictureBoxSizeMode.StretchImage
PictureBox2.Image = bmp_x
Dim srcRect_x As New Rectangle((0, 0, 340, 375)
Dim desRect_x As New Rectangle(270, 0, 610, 375)
Dim gra3 As Graphics = Graphics.FromImage(bmp2)
gra3.DrawImage(bmp_x, srcRect_x, desRect_x, GraphicsUnit.Pixel)
gra3.Dispose()
PictureBox3.SizeMode = PictureBoxSizeMode.StretchImage
PictureBox3.Image = bmp2
【追加事項】
bmpでキャプチャした画像の横にbmp_xの右側を切り取ってbmp2に結合している
つもりですが、そうならず、bmp_xの一部がbmp2の最初のほうに表示されてしま
います。
初めてグラフィック関連のクラスを利用したので、rectangle辺りの
理解が正しくないのかもしれません。
何卒、よろしくお願いします。