Celtic88 Posted August 12, 2013 Share Posted August 12, 2013 (edited) Can you determine the quality of the picture "$hHBmp" in this example ; thank to uez #include <GDIplus.au3> #include <ScreenCapture.au3> Global $STM_SETIMAGE = 0x0172 Global $ghGDIPDll $hGUI = GUICreate("Displays an image from Hb in button control", 900, 555) $idButton = GUICtrlCreatePic("", 0, 0, 900, 555, 0xE) GUISetState() _GDIPlus_Startup() Load_BMP_From_Hb(GUICtrlGetHandle($idButton)) _GDIPlus_Shutdown() While 1 Sleep(10) $msg = GUIGetMsg() If $msg = -3 Or $msg = $idButton Then ExitLoop WEnd GUIDelete($hGUI) Exit Func Load_BMP_From_Hb($CTRL) Local $hHBmp = _ScreenCapture_Capture("", 0, 0, 900, 555) _WinAPI_DeleteObject(_SendMessage($CTRL, $STM_SETIMAGE, 0, $hHBmp)) _WinAPI_UpdateWindow($CTRL) _WinAPI_DeleteObject($hHBmp) EndFunc ;==>Load_BMP_From_hb Edited August 12, 2013 by Mrbenkali Link to comment Share on other sites More sharing options...
Moderators JLogan3o13 Posted August 12, 2013 Moderators Share Posted August 12, 2013 Is this a quiz or are you asking how to determine pic quality? "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball How to get your question answered on this forum! Link to comment Share on other sites More sharing options...
Celtic88 Posted August 12, 2013 Author Share Posted August 12, 2013 (edited) I am sooo nooob My question is Is it impossible to change the quality of the image without saving thank youu my English is very weak Edited August 12, 2013 by Mrbenkali Link to comment Share on other sites More sharing options...
Celtic88 Posted August 12, 2013 Author Share Posted August 12, 2013 Is this a quiz or are you asking how to determine pic quality? yes Question to Answer ! Link to comment Share on other sites More sharing options...
UEZ Posted August 12, 2013 Share Posted August 12, 2013 (edited) What do you mean with "change the quality of the image" exactly? The take screenshot looks very good.Br,UEZ Edited August 12, 2013 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
Celtic88 Posted August 12, 2013 Author Share Posted August 12, 2013 Change the quality to weakest! Link to comment Share on other sites More sharing options...
Solution UEZ Posted August 12, 2013 Solution Share Posted August 12, 2013 (edited) Something like this here? expandcollapse popup#include <GUIConstantsEx.au3> #include <Constants.au3> #include <ScreenCapture.au3> Example() Func Example() _GDIPlus_Startup() Local Const $iW = @DesktopWidth / 2, $iH = @DesktopHeight / 2 Local $hGUI = GUICreate("GDI+ test", $iW , $iH, -1, -1) GUISetState() Local $hHBmp = _ScreenCapture_Capture("", 0, 0, @DesktopWidth / 2, @DesktopHeight / 2) ;create a GDI bitmap by capturing 1/4 of desktop Local $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hHBmp) ;convert GDI bitmap to GDI+ bitmap _WinAPI_DeleteObject($hHBmp) ;release GDI bitmap resource because not needed anymore Local $sImgCLSID = _GDIPlus_EncodersGetCLSID("jpg") ;create CLSID for a JPG image file type Local $tGUID = _WinAPI_GUIDFromString($sImgCLSID) ;convert CLSID GUID to binary form and returns $tagGUID structure Local $pEncoder = DllStructGetPtr($tGUID) ;get pointer of $tagGUID structure Local $tParams = _GDIPlus_ParamInit(1) ;initialize an encoder parameter list and return $tagGDIPPENCODERPARAMS structure Local $tData = DllStructCreate("int Quality") ;create struct to set JPG quality setting DllStructSetData($tData, "Quality", 10) ;quality 0-100 (0: lowest, 100: highest) Local $pData = DllStructGetPtr($tData) ;get pointer from quality struct _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData) ;add a value to an encoder parameter list Local $pParams = DllStructGetPtr($tParams) ;get pointer of encoder parameter list Local $pStream = _WinAPI_CreateStreamOnHGlobal() ;create stream _GDIPlus_ImageSaveToStream($hBitmap, $pStream, $pEncoder, $pParams) ;save the bitmap in JPG format in memory Local $hBitmapFromStream = _GDIPlus_BitmapCreateFromStream($pStream) ;create bitmap from a stream (here from the JPG in memory) Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI) ;create a graphics object from a window handle _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmapFromStream, 0, 0) ;display streamed image While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd ;cleanup resources _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_BitmapDispose($hBitmapFromStream) _GDIPlus_Shutdown() GUIDelete($hGUI) EndFunc ;==>Example Func _WinAPI_CreateStreamOnHGlobal($hGlobal = 0, $fDeleteOnRelease = 1) Local $Ret = DllCall('ole32.dll', 'long', 'CreateStreamOnHGlobal', 'handle', $hGlobal, 'bool', $fDeleteOnRelease, 'ptr*', 0) If @error Then Return SetError(@error, @extended, 0) If $Ret[0] Then Return SetError(10, $Ret[0], 0) Return $Ret[3] EndFunc ;==>_WinAPI_CreateStreamOnHGlobal Func _GDIPlus_ImageSaveToStream($hImage, $pStream, $pEncoder, $pParams = 0) Local $aResult = DllCall($ghGDIPDll, "int", "GdipSaveImageToStream", "handle", $hImage, "ptr", $pStream, "ptr", $pEncoder, "ptr", $pParams) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc Func _GDIPlus_BitmapCreateFromStream($pStream) Local $aResult = DllCall($ghGDIPDll, "int", "GdipCreateBitmapFromStream", "ptr", $pStream, "handle*", 0) If @error Then Return SetError(@error, @extended, 0) Return SetExtended($aResult[0], $aResult[2]) EndFuncBr,UEZ Edited August 12, 2013 by UEZ Celtic88 1 Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
Celtic88 Posted August 12, 2013 Author Share Posted August 12, 2013 UEZ Just one word . you ARE THE BEST . Link to comment Share on other sites More sharing options...
Celtic88 Posted August 12, 2013 Author Share Posted August 12, 2013 Another question how it can be put in this example ; Example by ProgAndy #include <ScreenCapture.au3> #include "AVIWriter.au3" ; http://www.autoitscript.com/forum/topic/86748-avi-writing-udf/ Hotkeyset("{ESC}","close") Break(0) FileDelete(@DesktopDir & "\test.avi") _StartAviLibrary() $avi = _CreateAvi(@DesktopDir & "\test.avi", 5,200,200) Do $m = MouseGetPos() $hBmp = _ScreenCapture_Capture("", $m[0] - 100, $m[1] - 100, $m[0] + 100, $m[1] + 100, True) _AddHBitmapToAvi($avi, $hBmp) _WinAPI_DeleteObject($hBmp) Sleep(200) Until False Func close() _CloseAvi($avi) _StopAviLibrary() exit EndFunc;==>close Link to comment Share on other sites More sharing options...
UEZ Posted August 12, 2013 Share Posted August 12, 2013 Instead of providing low quality JPGs to the function change the avi compression settings to low._AddHBitmapToAvi() sends uncompressed GDI bitmaps to the avi encoder that means you cannot send a JPG directly.Check out AVIWriter Extented.au3 somewhere in the same thread how to select a compression codec.Br,UEZ Celtic88 1 Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
Celtic88 Posted August 12, 2013 Author Share Posted August 12, 2013 Ah oky Thank you very much Link to comment Share on other sites More sharing options...
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