odaylton Posted December 4, 2017 Posted December 4, 2017 I would like to get a region of the screen but avoiding having to save to a file first. I believe it is a lack of knowledge on my part but the GUICtrlSetImage function does not allow you to define an image without being a file. How to do this: ;.... $Pic3 = GUICtrlCreatePic("", 8, 64, 84, 84, -1, _ $WS_EX_STATICEDGE) ;para ter borda em baixo relevo ;.... _ScreenCapture_Capture(@ScriptDir & "\areatemp.jpg", 10, 10, 200, 200) GUICtrlSetImage($Pic3, @ScriptDir & "\areatemp.jpg") ;....
SlackerAl Posted December 5, 2017 Posted December 5, 2017 If you use _ScreenCapture_Capture Without a file argument it will return a handle to a bitmap image. I see that _GDIPlus_GraphicsDrawImage Will draw an image object from a handle to a bitmap image. I've not tried any of that, and perhaps there is a much nicer way to do it, but until someone tells us.... :-) Problem solving step 1: Write a simple, self-contained, running, replicator of your problem.
odaylton Posted December 5, 2017 Author Posted December 5, 2017 yes I know that if I use the capture it returns me a handle of bitmapH but how to put it in a CreatePic. I would like to better understand the function of creating a CreatePic instead of using the DrawImage ... It would be lighter but if it does not have geito we will have to use the draw If someone has a simpres and immediate suggestion it would be wonderful
Malkey Posted December 5, 2017 Posted December 5, 2017 Here is a modified version of the _GDIPlus_GraphicsDrawImageRectRect() function's example in the AutoIt help file. #include <GUIConstantsEx.au3> #include <ScreenCapture.au3> Example() Func Example() _GDIPlus_Startup() ;initialize GDI+ Local Const $iWidth = 600, $iHeight = 600 Local $hGUI = GUICreate("GDI+ Example (" & @ScriptName & ")", $iWidth, $iHeight) ;create a test GUI GUISetState(@SW_SHOW) Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI) ;create a graphics object from a window handle Local $pIA = _GDIPlus_ImageAttributesCreate() ;create an ImageAttribute object Local $hHBmp = _ScreenCapture_Capture("", 0, 0, $iWidth, $iHeight) ;create a GDI bitmap by capturing an area on desktop Local $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hHBmp) ;convert GDI to GDI+ bitmap _WinAPI_DeleteObject($hHBmp) ;release GDI bitmap resource because not needed anymore _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0) ; or ;_GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight, 0, 0, $iWidth*2, $iHeight*2); Magnify use in destination "$iWidth*2, $iHeight*2)" Do Until GUIGetMsg() = $GUI_EVENT_CLOSE ;cleanup GDI+ resources _GDIPlus_ImageAttributesDispose($pIA) _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_Shutdown() GUIDelete($hGUI) EndFunc ;==>Example
Malkey Posted December 5, 2017 Posted December 5, 2017 (edited) Here is an easier one. ;#include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <ScreenCapture.au3> ; Modified from https://www.autoitscript.com/forum/topic/131438-how-to-set-a-bitmap-into-a-pic-control-using-a-bitmap-handle/?do=findComment&comment=915168 Local $width = 100, $height = 100 ;_GDIPlus_Startup() Local $hGUI = GUICreate("Test", 320, 256) Local $idPic = GUICtrlCreatePic("", 50, 50, $width, $height) Local $hBmp = _ScreenCapture_Capture("", 100, 100, $width + 100, $height + 100) ; Create_Bitmap(100, 100) Local $STM_SETIMAGE = 0x0172 GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hBmp) _WinAPI_DeleteObject($hBmp) ;_GDIPlus_Shutdown() GUISetState() While 1 Switch GUIGetMsg() Case -3 ; $GUI_EVENT_CLOSE = -3 ExitLoop Case $idPic MsgBox(0, "Test", "Picture was clicked!") EndSwitch WEnd Edited December 5, 2017 by Malkey There are no GDIPlus functions used, so don't need GDIPlus include file, Startup, or, Shutdown functions. Gianni 1
odaylton Posted December 6, 2017 Author Posted December 6, 2017 I imagined something like that but it has not been known for so much .... I'm going to do my tests but I believe that's it. I'll post the final product later ...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now