Geir1983 Posted June 18, 2013 Share Posted June 18, 2013 Is it possible to set an image drawn in real size (not scaled)? When using the functions below my picture is scaled up to the size defined when creating the element. In the Koda From designer there is an property on the image "Stretch" I have set to "sRealSize" without any effect. From Koda I create the picture with fixed size 64x64: $SearchLocate = GUICtrlCreatePic("", 296, 96, 64, 64) Then in my program i would select different pictures to draw on this element, the selected bmp will have variable size (example 11*41). I want this to be displayed inside the 64x64 element with absolute sizing, not stretched: GUICtrlSetImage($SearchLocate, @ScriptDir & "Search" & "LocateWindow.bmp) Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted June 18, 2013 Moderators Share Posted June 18, 2013 Geir1983, You can get the size of the image and then create the Pic control to be the correct size: #include <GDIPlus.au3> Global $sFileName = "Image_Path" ; <<<<<<<<<<<<<<<<<<<<<<<<< Put your image path here ; Initialize GDI+ library _GDIPlus_Startup() ; Get bitmap $hBitmap = _GDIPlus_BitmapCreateFromFile($sFileName) ; Get size $iX = _GDIPlus_ImageGetWidth($hBitmap) $iY = _GDIPlus_ImageGetHeight($hBitmap) ; Display result MsgBox(0, "Size", $sFileName & @CRLF & @CRLF & $iX & " x " & $iY) ; Clean up resources _GDIPlus_BitmapDispose($hBitmap) ; Shut down GDI+ library _GDIPlus_Shutdown() I hope that helps. M23 Geir1983 and Xandy 2 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Geir1983 Posted June 18, 2013 Author Share Posted June 18, 2013 (edited) Ok, I was hoping there was an easier way, like a setting for the pic element. I feel this should be an option If I want to read the properties of the bmp and alter the Pic, how can I update the pic element generated from Kuda? (I dont want to manually add variables in the generated code). GUICtrlSetPos($SearchLocate, left? , top? , $iX , $iY ) Edit, this is how i see it: Func _ChangePic($ElementId, $Picture) ; Initialize GDI+ library _GDIPlus_Startup() ; Get bitmap $hBitmap = _GDIPlus_BitmapCreateFromFile($Picture) ; Get size $iX = _GDIPlus_ImageGetWidth($hBitmap) $iY = _GDIPlus_ImageGetHeight($hBitmap) ; Clean up resources _GDIPlus_BitmapDispose($hBitmap) ; Shut down GDI+ library _GDIPlus_Shutdown() GUICtrlSetPos ($ElementId, left? , top? , $iX , $iY ) ;Needs coords for placement GUICtrlSetImage($ElementId, $Picture) Return EndFunc Edited June 18, 2013 by Geir1983 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted June 18, 2013 Moderators Share Posted June 18, 2013 Geir1983, I feel this should be an optionThen ask MS - it is their control. All AutoIt does is action the API calls it accepts. Yes, GUICtrlSetPos is what you need. If you want to keep the same top-left position then just use Default for the position parameters as explained in the Help file. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Solution Geir1983 Posted June 18, 2013 Author Solution Share Posted June 18, 2013 Thanks, the Default was what I needed Func _ChangePic($ElementId, $Picture) ; Initialize GDI+ library _GDIPlus_Startup() ; Get bitmap $hBitmap = _GDIPlus_BitmapCreateFromFile($Picture) ; Get size $iX = _GDIPlus_ImageGetWidth($hBitmap) $iY = _GDIPlus_ImageGetHeight($hBitmap) ; Clean up resources _GDIPlus_BitmapDispose($hBitmap) ; Shut down GDI+ library _GDIPlus_Shutdown() GUICtrlSetPos ($ElementId, Default , Default , $iX , $iY ) GUICtrlSetImage($ElementId, $Picture) Return EndFunc Link to comment Share on other sites More sharing options...
funkey Posted June 18, 2013 Share Posted June 18, 2013 Use style $SS_CENTERIMAGE to not resize the picture. Programming today is a race between software engineers striving tobuild bigger and better idiot-proof programs, and the Universetrying to produce bigger and better idiots.So far, the Universe is winning. Link to comment Share on other sites More sharing options...
Geir1983 Posted June 19, 2013 Author Share Posted June 19, 2013 I tried this: $Pic1 = GUICtrlCreatePic("", 352, 216, 113, 81, BitOR($GUI_SS_DEFAULT_PIC,$SS_CENTERIMAGE)) Does not work, image still is stretched. Link to comment Share on other sites More sharing options...
funkey Posted June 19, 2013 Share Posted June 19, 2013 You are right, sorry!I used this example from documentation, and only after resizing the control it is not getting stretched. ?#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $gui, $guiPos, $pic, $picPos Example1() ;----- example 1 ---- Func Example1() Local $n, $msg GUICreate("My GUI picture", 350, 300, -1, -1, $WS_SIZEBOX + $WS_SYSMENU) ; will create a dialog box that when displayed is centered $n = GUICtrlCreatePic(StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", 0, -1)) & "Examples\GUI\mslogo.jpg", 50, 50, 200, 50, 0x1200) GUISetState() ; Run the GUI until the dialog is closed While 1 $msg = GUIGetMsg() If $msg = $GUI_EVENT_CLOSE Then ExitLoop WEnd ; resize the control $n = GUICtrlSetPos($n, 50, 50, 260, 70) ; Run the GUI until the dialog is closed While 1 $msg = GUIGetMsg() If $msg = $GUI_EVENT_CLOSE Then ExitLoop WEnd GUIDelete() EndFunc ;==>Example1 Programming today is a race between software engineers striving tobuild bigger and better idiot-proof programs, and the Universetrying to produce bigger and better idiots.So far, the Universe is winning. 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