GDI+, von _GDIPlus_ImageLoadFromFile($sFileName) die Breite ändern (nicht zoomen)

  • Hey@all
    Ich möchte von dem Return von "_GDIPlus_ImageLoadFromFile($sFileName)" die Breite ändern.
    Dh, dass ich zB das Bild halbieren oder vierteln möchte:
    Bild das ich benutze:100x100pixel
    Daraus möchte ich machen:90x100pixel oder 82x100pixel (nicht verengen, sondern dort "abschneiden"=>10 oder 18pixel wegschneiden)
    MfG AntiSpeed

    Nur keine Hektik - das Leben ist stressig genug

    Einmal editiert, zuletzt von AntiSpeed (13. September 2010 um 17:09)

  • Vielleicht so:

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    Opt("GUIOnEventMode", 1)

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

    _GDIPlus_Startup ()

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

    $hIFile = _GDIPlus_ImageLoadFromFile("c:\Program Files\AutoIt3\Examples\GUI\mslogo.jpg")
    $iW = _GDIPlus_ImageGetWidth($hIFile)
    $iH = _GDIPlus_ImageGetHeight($hIFile)

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

    $crop_x1 = 46
    $crop_y1 = 4
    $crop_x2 = 88
    $crop_y2 = 13
    $width = $crop_x2 - $crop_x1
    $height = $crop_y2 - $crop_y1

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

    $hgui = GUICreate("GDI+ Image Cropping by UEZ", $iW, $iH)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic)
    $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    GUISetOnEvent(-3, "_Exit")
    GUISetState()

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

    _GDIPlus_GraphicsDrawImageRectRect($hBackbuffer, $hIFile, $crop_x1, $crop_y1, $width, $height, 0, 0, $width, $height)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, $iW / 2 - $width / 2, $iH / 2 - $height / 2)
    ;~ _GDIPlus_ImageSaveToFile ($hBitmap, "Cropped.jpg")

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

    While Sleep(1000)

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

    WEnd

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

    Func _Exit()
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hBackbuffer)
    _GDIPlus_ImageDispose($hIFile)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit]


    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    2 Mal editiert, zuletzt von UEZ (12. September 2010 um 17:27)

  • Hallo AntiSpeed,

    eine Möglichkeit ist

    [autoit]

    _GDIPlus_BitmapCloneArea

    [/autoit]

    hier einmal das leicht abgeänderte Beospiel der Hilfe:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <ScreenCapture.au3>

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

    Opt('MustDeclareVars', 1)

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

    _Main()

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

    Func _Main()
    Local $hBitmap, $hClone, $hImage, $iX, $iY
    ; Initialize GDI+ library
    _GDIPlus_StartUp ()

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

    ; Capture 32 bit bitmap
    $hImage = _GDIPlus_ImageLoadFromFile ("C:\Dokumente und Einstellungen\Bert\Eigene Dateien\Beetle9.jpg")

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

    ; Create 24 bit bitmap clone
    $iX = _GDIPlus_ImageGetWidth ($hImage) *.5
    $iY = _GDIPlus_ImageGetHeight ($hImage) *.5
    $hClone = _GDIPlus_BitmapCloneArea ($hImage, 0, 0, $iX, $iY, $GDIP_PXF24RGB)

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

    ; Save bitmap to file
    _GDIPlus_ImageSaveToFile ($hClone, @MyDocumentsDir & "\GDIPlus_Image.bmp")

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

    ; Clean up resources
    _GDIPlus_ImageDispose ($hClone)
    _GDIPlus_ImageDispose ($hImage)

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

    ; Shut down GDI+ library
    _GDIPlus_ShutDown ()

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

    EndFunc ;==>_Main

    [/autoit]

    das Skript speichert das linke obere Viertel eines Screenshots JPG-Files in eine Datei,

    Edit: Skript ausgetauscht (anstelle eines Screenshots, wird jetzt ein JPG genommen)
    mfg autoBert

    Einmal editiert, zuletzt von autoBert (12. September 2010 um 16:21)

  • In der Tat ist der Code mit _GDIPlus_BitmapCloneArea() kürzer:

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    Opt("GUIOnEventMode", 1)

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

    _GDIPlus_Startup ()

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

    $hIFile = _GDIPlus_ImageLoadFromFile("c:\Program Files\AutoIt3\Examples\GUI\mslogo.jpg")
    $iW = _GDIPlus_ImageGetWidth($hIFile)
    $iH = _GDIPlus_ImageGetHeight($hIFile)

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

    $crop_x1 = 46
    $crop_y1 = 4
    $crop_x2 = 88
    $crop_y2 = 13
    $width = $crop_x2 - $crop_x1
    $height = $crop_y2 - $crop_y1

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

    $hgui = GUICreate("GDI+ Image Cropping by UEZ", $iW, $iH)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hClone = _GDIPlus_BitmapCloneArea($hIFile, $crop_x1, $crop_y1, $width, $height)
    GUISetOnEvent(-3, "_Exit")
    GUISetBkColor($hgui, 0)
    GUISetState()

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

    _GDIPlus_GraphicsDrawImage($hGraphic, $hClone, $iW / 2 - $width / 2, $iH / 2 - $height / 2)
    ;~ _GDIPlus_ImageSaveToFile ($hClone, "Cropped.jpg")

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

    While Sleep(1000)

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

    WEnd

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

    Func _Exit()
    _GDIPlus_BitmapDispose($hClone)
    _GDIPlus_ImageDispose($hIFile)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit]

    Danke autoBert! ;)

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯