GDI+ - Bild von Graphic speichern & vergrößern ohne Smoothing

  • Hallo Leute,

    1. ich habe ein Bild aus einer Datei geladen und zeichne es mithilfe von GDI+ auf eine Graphic.
    Jetzt möchte ich dieses Bild speichern, nur wie ziehe ich es von der Graphic ?
    2. Möchte ich ein Bild vergrößer so wird dieses "gesmootht" (richtig geschrieben ?), mit dem Smoothing Befehl der _GDIPlus UDF funktioniert das abschalten allerdings nicht, ich entsinne mich dass diese Frage schon einmal gestellt und beantwortet wurde, finde den thread aber nicht mehr

    Danke für eure Hilfe, MfG

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal


  • Hallo Leute,

    1. ich habe ein Bild aus einer Datei geladen und zeichne es mithilfe von GDI+ auf eine Graphic.
    Jetzt möchte ich dieses Bild speichern, nur wie ziehe ich es von der Graphic ?


    Von der Graphic direkt geht es nicht. Du musst das Bild z.B. über den Doppeltbuffer schieben, damit du das Bild von der Bitmap "abziehen" kannst!

    [autoit]


    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphic)
    $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

    [/autoit]

    Mit _GDIPlus_ImageSaveToFile($hBitmap, $sFileName) kannst du das Bild entsprechend abspeichern.



    2. Möchte ich ein Bild vergrößer so wird dieses "gesmootht" (richtig geschrieben ?), mit dem Smoothing Befehl der _GDIPlus UDF funktioniert das abschalten allerdings nicht, ich entsinne mich dass diese Frage schon einmal gestellt und beantwortet wurde, finde den thread aber nicht mehr


    Danke für eure Hilfe, MfG

    Da kannst du die _GDIPlus_GraphicsSetInterpolationMode() Funktion dazu benutzen (Wert 5), damit das vergrößerte Bild nicht geglättet wird.

    [autoit]


    Func _GDIPlus_GraphicsSetInterpolationMode($hGraphics, $iInterpolationMode)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "hwnd", $hGraphics, "int", $iInterpolationMode)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0] = 0
    EndFunc ;==>_GDIPlus_GraphicsSetInterpolationMode

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯