nend Posted June 6, 2017 Posted June 6, 2017 (edited) I made a test script which sends the png image to a picture control. I want to use this as a UDF but how do I clear the old image every time I change this image and still use as 1 command ( _Image_to_pic($image, $pic_control) )? expandcollapse popup#include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <GuiConstantsEx.au3> #include <WindowsConstants.au3> _GDIPlus_Startup() Local $hGUI = GUICreate("Test", 400, 300) Local $iPic = GUICtrlCreatePic("", 0, 0, 41, 36) _Image_to_pic(_Pausepng(), $iPic) GUISetBkColor(0xFFFFFF) GUICtrlSetCursor(-1, 0) GUISetState(@SW_SHOW) Sleep(3000) _Image_to_pic(_Playpng(), $iPic) Do Sleep(10) Until GUIGetMsg() = $GUI_EVENT_CLOSE _GDIPlus_Shutdown() Func _Image_to_pic($image, $pic_control) Local $bitmap = _GDIPlus_BitmapCreateFromMemory($image) Local $width = _GDIPlus_ImageGetWidth($bitmap) Local $height = _GDIPlus_ImageGetHeight($bitmap) Local $graphics = _GDIPlus_ImageGetGraphicsContext($bitmap) _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height) Local $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bitmap) _WinAPI_DeleteObject(GUICtrlSendMsg($pic_control, 0x0172, 0, $hHBitmap)) ;$STM_SETIMAGE = 0x0172 _WinAPI_DeleteObject($hHBitmap) _GDIPlus_GraphicsDispose($graphics) _GDIPlus_BitmapDispose($bitmap) EndFunc Func _Pausepng() Local $sFileBin = 'iVBORw0KGgoAAAANSUhEUgAAACkAAAAkCAYAAAAU/hMoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkI2MUFDQ0NFQTYxODExRTRBNTFEQ0FEOTUxNzRFRjFCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkI2MUFDQ0NEQTYxODExRTRBNTFEQ0FEOTUxNzRFRjFCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzMgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOjg4RUE3QkUxRUU2M0REMTE5QjZFOEZGN0NCRjg5RDIyIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOjM5QThCNzhFRUU2M0REMTE5QjZFOEZGN0NCRjg5RDIyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+ygtXwQAAAddJREFUeNrsmE1uwkAMhScJSRBZpDtU9QJsuuk1uEdP0U13vUB7A87AJWhPkUXbTYUQEgk/qV9VJOJ4QiYwoZViyYuMHvGHZ+wxOHmeq79urvoH1kF2kB2kbUjHca7JX8lzwSdMG2t0KfmjSdye4Ze6H41Gd+SFxSRJ1Gw2K4l931fj8biwlqZpMJ1OHwj0mXr0pw3IYRRFKgiC4kt6+tdwLZ7jOHbn8/mQHq1AKs/zToL8PQrK5nb/APHAANec4ctAuq5bypwOUpdl65AIwINUBTUFOgskpiY+OVVNUueYsowhd7ud2m63pTWdcW0TcGNIBF2v10dB9sa1rWQSQFmWFdY2m412q7m2lUwCiG6N2tni2mPHo7IQ6jjZCz6i8QnTxhVa+G3duI1akEkVS3rr243mzBu0dE73gP1+XzwCJltuDBmGYSkwgkqQMAwkUsVbhcRdLAVeLBZiJiUtTUB2txuQg8GgVguCce3+/m99wNAFRSYvMmCgMvl5qqpW457Y9rUIeKnR225B76jk1WpVWNRVNoxrkVl6Byg/bN04N+RvSB6dw/zQpRsHvw4F3ZL8ySSu02Teo+AhCpctZ/Su5YEG1XElJOXLOF73118H2UGa27cAAwApWoU8wbQoOQAAAABJRU5ErkJggg==' $sFileBin = Binary(_Base64Decode($sFileBin)) Return $sFileBin EndFunc ;==>_Pauzepng Func _Playpng() Local $sFileBin = 'iVBORw0KGgoAAAANSUhEUgAAACkAAAAkCAYAAAAU/hMoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjZERkVBREU1QTYxQTExRTRCOEMyRjYwQzhGQ0FCQjEwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjZERkVBREU0QTYxQTExRTRCOEMyRjYwQzhGQ0FCQjEwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzMgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOjg4RUE3QkUxRUU2M0REMTE5QjZFOEZGN0NCRjg5RDIyIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOjM5QThCNzhFRUU2M0REMTE5QjZFOEZGN0NCRjg5RDIyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+oQxBVgAAAntJREFUeNrsmLuLWkEUxo+5PhCVxU4IWlmE9ImNgsU2VkoKCwsff0YSQiAhhBTZbkmZwJYJmyLNQpImhWAKQcRC0SbRQlTcSDC+rjffEV1EsuvsOveuu9mBH96j452PM2fOzBmTpmm07e0WXYF2I1JWM2/6ApPJtNH/RdbE9ZlueCsDPoI0UAxXye4+CzQrGAYCAc3n8/EXJfCAtctIX+vGZ9YOBM/tWCyW41gsNrObzSbVajVqNBrfYT4CX7cmJq1W6wyv10vhcJhCodB9j8fzBT99Bve2ISZPRC7w+/0UiUQoGAzuoksOfAB39RApNN0QdZxKpc7sVyqVKJvNqng8AE/BD1nTLSwyk8kIDVgoFCiXy41gvgEvQMswkel0Wnh6ptMp5fN55jfMPfAa9HQXmUwmzx1Lg8GAisUie7cN8+Xcu390E5lIJC4c+L1ej8rlMsftT5jPwVswkSqS82Q8Ht94lXa7XapUKlStViswn4D3moBKYZHRaFRaSmm1WrMNoV6vv8P4a1ek8CloOBxKE+lyucjpdPLjHVl79w53k8win94W2buFPWk2b3b05ME4NeHzE8zHoCj10Mvbot1uv5C4yWRC4/GYVFX9BvMhyOp2Mnc4HOd68Wg0on6/z7kyP/fcka7lA3tSVCQvMM6L4CTNzONQ/xrHZrOt9RznwU6nU4f5bDlhG1KIsScVRTk15trtNuc+3vpegf3Vrc+wapFX5upq5aQMFocI5tellbQsiKdzeXuD94SPY0YUYg5Mt4ayQXO73do8zjjefEYVYmKdiA7BeFEirPx2+dXi0uJR0Ffd6huMfwm8MndBRtxv3lz9/Vci/wowALi8Ftb9p4m2AAAAAElFTkSuQmCC' $sFileBin = Binary(_Base64Decode($sFileBin)) Return $sFileBin EndFunc ;==>_Afspelenpng Func _Base64Decode($input_string) ; by trancexx Local $struct = DllStructCreate('int') Local $a_Call = DllCall('Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', 0, 'ptr', DllStructGetPtr($struct, 1), 'ptr', 0, 'ptr', 0) If @error Or Not $a_Call[0] Then Return SetError(1, 0, '') Local $a = DllStructCreate('byte[' & DllStructGetData($struct, 1) & ']') $a_Call = DllCall('Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', DllStructGetPtr($a), 'ptr', DllStructGetPtr($struct, 1), 'ptr', 0, 'ptr', 0) If @error Or Not $a_Call[0] Then Return SetError(2, 0, '') Return DllStructGetData($a, 1) EndFunc ;==>_Base64Decode Edited June 6, 2017 by nend
anthonyjr2 Posted June 6, 2017 Posted June 6, 2017 (edited) Why not add a check right when the function is called? I'm not sure if your question is how to check to remove the image or how to actually delete it from the control. I don't know enough about GDI+ images to delete the pic but I can look around. Local $pixExists = False Func _Image_to_pic($image, $pic_control) If $picExists Then ;delete existing picture from control EndIf Local $bitmap = _GDIPlus_BitmapCreateFromMemory($image) Local $width = _GDIPlus_ImageGetWidth($bitmap) Local $height = _GDIPlus_ImageGetHeight($bitmap) Local $graphics = _GDIPlus_ImageGetGraphicsContext($bitmap) _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height) Local $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bitmap) _WinAPI_DeleteObject(GUICtrlSendMsg($pic_control, 0x0172, 0, $hHBitmap)) ;$STM_SETIMAGE = 0x0172 _WinAPI_DeleteObject($hHBitmap) _GDIPlus_GraphicsDispose($graphics) _GDIPlus_BitmapDispose($bitmap) EndFunc Edited June 6, 2017 by anthonyjr2 UHJvZmVzc2lvbmFsIENvbXB1dGVyZXI=
nend Posted June 6, 2017 Author Posted June 6, 2017 (edited) My question is how to delete the existing image from this control before updating it with a new picture. If you run the script you see the both image ontop on each other. I can do this with _GDIPlus_GraphicsClear but I don't know a way to include this in this script. Edited June 6, 2017 by nend
UEZ Posted June 6, 2017 Posted June 6, 2017 Try ... GUISetState(@SW_SHOW) Sleep(3000) GUICtrlSendMsg($iPic, 0x0172, 0, 0) ;should delete previous image _Image_to_pic(_Playpng(), $iPic) ... nend and CosmicDan 2 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!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ
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