GDI verkleinert Bild. Wieso?

  • Hi :)
    Ich bin am verzweifeln. Ich suche jetzt schon seit einer Stunde nach einer Lösung für mein Problem.
    Ich habe ein GUI, das so groß wie der Bildschirm ist. Da will ich jetzt ein 1500x1500 großes Bild reinzeichnen (mit GDI natürlich).
    Das Problem ist, wenn ich das Bild mit _GDIPlus_GraphicsDrawImage zeichne, wird es extrem verkleinert ohne das ich ein Matrix oder irgendetwas anderes mit dem Bild oder der Grafik gemacht habe. Jetzt habe ich mir schnell ein einfaches anderes Bild gemacht (auch 1500x1500 und auch im PNG Format) und komischerweise wird das Bild korrekt angezeigt. Warum?

    Das sind die Bilder:
    Falsch angezeigtes Bild:
    http://img3.imagebanana.com/img/v45gvox1/bild1FALSCH.png

    Richtig angezeigtes Bild:
    http://img3.imagebanana.com/img/v18nwo9j/bild2RICHTIG.png

    Danke schonmal,
    Carsten

  • Jo bei mir ist es das selbe, weis auch nicht warum das so ist, lass es doch einfach mit _GDIPlus_GraphicsDrawImageRect zeichnen?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet ( "{ESC}", "_ende" )

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui = GUICreate("Rahmen", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
    GUISetBkColor(0xABCDEF)
    _WinAPI_SetLayeredWindowAttributes($hGui, 0xABCDEF, 255)
    GUISetState()
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)

    [/autoit] [autoit][/autoit] [autoit]

    $image=_GDIPlus_ImageLoadFromFile(@scriptdir&"\bild1FALSCH.png")
    ;~ $image=_GDIPlus_ImageLoadFromFile(@ScriptDir&"\bild2RICHTIG.png")
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $image, 0, 0, 1500, 1500 )

    [/autoit] [autoit][/autoit] [autoit]

    ;~ _GDIPlus_GraphicsDrawImage( $hGraphic,$image, 0, 0 )

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg=GUIGetMsg()
    Switch $msg
    Case $Gui_event_close
    Exit
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _ende()
    _GDIPlus_ImageDispose ( $image )
    _GDIPlus_GraphicsDispose ( $hGraphic )
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinAPI_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $dwFlages = 0x03, $isColorRef = False)
    ; progandy
    If $dwFlages = Default Or $dwFlages = "" Or $dwFlages < 0 Then $dwFlages = 0x03
    If Not $isColorRef Then
    $i_transcolor = Hex(String($i_transcolor), 6)
    $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $dwFlages)
    Select
    Case @error
    Return SetError(@error, 0, 0)
    Case $Ret[0] = 0
    Return SetError(4, _WinAPI_GetLastError(), 0)
    Case Else
    Return 1
    EndSelect
    EndFunc ;==>_WinAPI_SetLayeredWindowAttributes

    [/autoit]

    Einmal editiert, zuletzt von Greek (31. März 2009 um 17:14)