好了,在上面已经理解的基础上,我们可以将画板定义为AU3自身建立的GUI界面,跟我来一步一步的实现:
1、建立一个GUI
增加以下代码:#include <GuiConstantsEx.au3>
Dim $form1
$form1 = GUICreate("test", 600, 500)
GUISetState()
_Main()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
这样,一个空的GUI就建好了,这个GUI的句柄是:$form1, 下面就可以通过这个句柄来定义画板了
2、改写下面这句代码:$hGraphic = _GDIPlus_ImageGetGraphicsContext ($hImage1);
改为:
$hGraphic = _GDIPlus_GraphicsCreateFromHWND ($form1)
OK,这样就将这个空的GUI作为一个画板了,在上面画你想画的东西吧~~
下面的代码是将捕捉屏幕左上角的图片画到GUI中:#include <GDIPlus.au3>
#include <ScreenCapture.au3>
#include <WinAPI.au3>
#include <GuiConstantsEx.au3>
Opt('MustDeclareVars', 1)
Dim $form1
$form1 = GUICreate("GDI+", 600, 500)
GUISetState()
_Main()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func _Main()
Local $hBitmap1, $hBitmap2, $hImage1, $hImage2, $hGraphic
; Initialize GDI+ library; 初始化GDI+库
_GDIPlus_Startup ()
; Capture full screen ; 捕捉屏幕 ,到时作为画板的底图,也就是做为画板
$hBitmap1 = _ScreenCapture_Capture ("");位图信息,原始的参照物
$hImage1 = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap1);从位图句柄创建Bitmap对象,通过这个对象对位图进行操作,或者理解为图片构成的一个元素
; Capture screen region ; 捕捉屏幕左上角
$hBitmap2 = _ScreenCapture_Capture ("", 0, 0, 400, 300);位图信息,原始的参照物
$hImage2 = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap2);从位图句柄创建Bitmap对象,通过这个对象对位图进行操作,或者理解为图片构成的一个元素
; Draw one image in another; 将一个图绘制到另一个图像中,也就是将$hImage2 绘到画板上。
$hGraphic = _GDIPlus_GraphicsCreateFromHWND ($form1);获取图像的场景,也就是定义画板,这个画板在什么地方,用什么来构成,不单止是用Bitmap对象,也可以是GUI对象来设置画板。
;在这个例子中,将画板改为GUI的句柄$form1,将GUI做为画板
_GDIPlus_GraphicsDrawImage ($hGraphic, $hImage2, 100, 100);将$hImage2 操作的元素画到画板的指定位置
;有了画板$hGraphic,我们就可以在画板上画图了
; Draw a frame around the inserted image;在插入的图像周围画个边框
_GDIPlus_GraphicsDrawRect ($hGraphic, 100, 100, 400, 300)
; Save resultant image;保存图像
_GDIPlus_ImageSaveToFile ($hImage1, "GDIPlus_Image.jpg")
; Clean up resources
_GDIPlus_ImageDispose ($hImage1)
_GDIPlus_ImageDispose ($hImage2)
_WinAPI_DeleteObject ($hBitmap1)
_WinAPI_DeleteObject ($hBitmap2)
; Shut down GDI+ library
_GDIPlus_ShutDown ()
EndFunc ;==>_Main
|