GDI+: Bug evtl. bei _GDIPlus_GraphicsGetSmoothingMode?

  • Hallo Leute,

    ich habe evtl. einen Bug bei der Funktion _GDIPlus_GraphicsGetSmoothingMode entdeckt.

    Hier mal ein Beispielscript, was ich grade auf die Schnelle gefunden habe:

    Spoiler anzeigen
    [autoit]

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

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

    Global $width = 302
    Global $height = 302

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

    $hGUI = GUICreate("BlueJ Figuren Demo", $width, $height)
    GUISetState(@SW_SHOW)

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

    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $Bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic) ;create bitmap
    $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    _GDIPlus_GraphicsSetSmoothingMode($backbuffer, 2)
    $iMode = _GDIPlus_GraphicsGetSmoothingMode($backbuffer)
    ConsoleWrite(@CRLF & $iMode)
    $hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFF00)

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

    _GDIPlus_GraphicsClear($hGraphic)
    _GDIPlus_GraphicsFillPie($hGraphic, $width / 2 - 60 / 2, $height / 2 - 60 / 2, 60, 60, 1, 360, $hBrush)

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

    Local $a = 1

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

    While GUIGetMsg() <> $GUI_EVENT_CLOSE
    _GDIPlus_GraphicsClear($backbuffer)
    _GDIPlus_GraphicsFillPie($backbuffer, $a, 50, 60, 60, 1, 360, $hBrush)
    _GDIPlus_GraphicsDrawImageRect($hgraphic, $bitmap, 0, 0, $width, $height)

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

    $a += 1
    Sleep(10)
    WEnd

    [/autoit]

    Das Problem ist, wenn ich den Smoothing Mode auf 2 setzte, bekomme ich von dem Get.. 0 zurück, wenn ich auf 0 oder 1 setzte bekomme ich 1 zurück. Also ne 0 bekomme ich garnicht zurück.
    Kennt jemand das Problem auch?

  • Irgendwas scheint bei der Funktion nicht ganz richtig zu sein...
    Da steht nämlich das hier:

    [autoit]

    Switch $aResult[2]
    Case 3
    Return SetExtended($aResult[0], 1)
    Case 7
    Return SetExtended($aResult[0], 2)
    Case Else
    Return SetExtended($aResult[0], 0)
    EndSwitch

    [/autoit]


    Was aber nicht stimmen kann, weil $aResult[2] in keinem Fall 7 ist... :S (Hab es mehrmals mit _ArrayDisplay überprüft.)

  • Bei MSDN hab ich auch nichts hilfreiches gefunden, zudem was er zurück gibt.

    Edit: Seltsam ist auch, bei _GDIPlus_GraphicsSetSmoothingMode hat man ja eigentlich 3 Modi, 0, 1 und 2. Aber im Code dazu steht

    [autoit]

    If $iSmooth < 0 Or $iSmooth > 4 Then $iSmooth = 0

    [/autoit]


    also hat man doch eigentlich 5 Modi, 0 bis 4. Oder sehe ich das falsch?

    Einmal editiert, zuletzt von m-obi (8. Mai 2010 um 11:39)