Jump to content

GUICtrlSetImage without stretch?


Go to solution Solved by Geir1983,

Recommended Posts

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

  • Moderators

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

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

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 by Geir1983
Link to comment
Share on other sites

  • Moderators

Geir1983,

 

I feel this should be an option

Then 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

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

  • Solution

Thanks, the Default was what I needed :shifty:

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

Use style $SS_CENTERIMAGE to not resize the picture.

Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs, and the Universe
trying to produce bigger and better idiots.
So far, the Universe is winning.

Link to comment
Share on other sites

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 to
build bigger and better idiot-proof programs, and the Universe
trying to produce bigger and better idiots.
So far, the Universe is winning.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...