BMP drehen

  • Hallo

    Ich möchte den unten stehenden Code statt auf ein JPG auf ein BMP anwenden...

    Irgendwie klappt das aber nicht mit der Drehung? ( ich änderte alle .jpg auf .bmp sowie _GDIPlus_EncodersGetCLSID("JPG") auf _GDIPlus_EncodersGetCLSID("BMP"))

    Was mache ich falsch?

    Vielen Dank für eure Hilfe...

    Gruss Schlikk


    [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, $hImage, $sCLSID, $tData, $tParams

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

    ; Screen Capture
    _ScreenCapture_Capture (@MyDocumentsDir & "\GDIPlus_Image.jpg")

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

    ; Initialize GDI+ library
    _GDIPlus_Startup ()

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

    ; Load image
    $hImage = _GDIPlus_ImageLoadFromFile (@MyDocumentsDir & "\GDIPlus_Image.jpg")

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

    ; Get JPEG encoder CLSID
    $sCLSID = _GDIPlus_EncodersGetCLSID ("JPG")

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

    ; Set up parameters for 90 degree rotation
    $tData = DllStructCreate("int Data")
    DllStructSetData($tData, "Data", $GDIP_EVTTRANSFORMROTATE90)
    $tParams = _GDIPlus_ParamInit (1)
    _GDIPlus_ParamAdd ($tParams, $GDIP_EPGTRANSFORMATION, 1, $GDIP_EPTLONG, DllStructGetPtr($tData, "Data"))

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

    ; Save image with rotation
    _GDIPlus_ImageSaveToFileEx ($hImage, @MyDocumentsDir & "\GDIPlus_Image2.jpg", $sCLSID, DllStructGetPtr($tParams))

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

    ; Shut down GDI+ library
    _GDIPlus_ShutDown ()

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

    EndFunc ;==>_Main

    [/autoit]
  • Brauch man doch garnet den Befehl?

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>

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

    _GDIPlus_Startup()

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

    $hGui = GUICreate("Test Rotate", 800, 600)
    GUISetState()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)

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

    $hImage = _GDIPlus_ImageLoadFromFile(@WindowsDir & "\Angler.bmp")
    $iWidth = _GDIPlus_ImageGetWidth($hImage) * 96 / _GDIPlus_ImageGetVerticalResolution($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage) * 96 / _GDIPlus_ImageGetHorizontalResolution($hImage)

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

    $hMatrix = _GDIPlus_MatrixCreate()
    _GDIPlus_MatrixTranslate($hMatrix, 400, 300)

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

    _GDIPlus_MatrixRotate($hMatrix, 90, "False")
    _GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, -$iWidth / 2, -$iHeight / 2)

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

    While GUIGetMsg() <> -3
    GUIRegisterMsg ( 0x000F, "my_wm_paint" )
    Sleep(10)
    WEnd

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

    ;~ _GDIPlus_MatrixDispose($hMatrix)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()

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

    Func my_wm_paint()
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, -$iWidth / 2, -$iHeight / 2)
    EndFunc

    [/autoit]
  • Hallo Greek

    Danke für deine Antwort.

    Ich suche nach einer Methode, um ein BMP zu öffnen, dieses zu drehen und dann zu speichern...ich habe deinen Code versucht umzubauen, bin aber leider kläglich gescheitert... :S

    Wie müsste ich vorgehen um das BMP gedreht zu speichern? Sorry, stehe grad ziemlich auf dem Schlauch..

  • Habe eine Lösung in einem alten Beitrag gefunden.. :whistling:
    (das nächste Mal wohl länger suchen...Dummdiduuuu...)


    [autoit]

    #include<GDIplus.au3>
    ; Konstanten für RotateFlip-Operationen
    Global Const $RotateNoneFlipNone = 0
    Global Const $Rotate90FlipNone = 1
    Global Const $Rotate180FlipNone = 2
    Global Const $Rotate270FlipNone = 3

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

    Global Const $RotateNoneFlipX = 4
    Global Const $Rotate90FlipX = 5
    Global Const $Rotate180FlipX = 6
    Global Const $Rotate270FlipX = 7

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

    Global Const $RotateNoneFlipY = $Rotate180FlipX
    Global Const $Rotate90FlipY = $Rotate270FlipX
    Global Const $Rotate180FlipY = $RotateNoneFlipX
    Global Const $Rotate270FlipY = $Rotate90FlipX

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

    Global Const $RotateNoneFlipXY = $Rotate180FlipNone
    Global Const $Rotate90FlipXY = $Rotate270FlipNone
    Global Const $Rotate180FlipXY = $RotateNoneFlipNone
    Global Const $Rotate270FlipXY = $Rotate90FlipNone

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

    ;===============================================================================
    ;
    ; Function Name: _GDIplus_ImageRotateFlip
    ; Description:: Rotates or flips an Image
    ; Parameter(s): $hImage - GDIPlus image handle
    ; $RotateFlipType - RotateFlip action to perform
    ; Requirement(s): GDIplus
    ; Return Value(s): Success: 1
    ; Error: 0 and @error <> 0
    ; Author(s): Prog@ndy
    ;
    ;===============================================================================
    ;
    Func _GDIplus_ImageRotateFlip($hImage,$RotateFlipType)
    Local $ret = DllCall($ghGDIPDll,"int","GdipImageRotateFlip","hwnd",$hImage,"dword",$RotateFlipType)
    If @error Then Return SetError(1,0,0)
    Return SetError($ret[0],0,$ret[0]=0)
    EndFunc

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

    Func _GDIPlus_BitmapCreateFromImage($hImage)
    ; Prog@ndy
    Local $Graph = _GDIPlus_ImageGetGraphicsContext($hImage)
    Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics(_GDIPlus_ImageGetWidth($hImage),_GDIPlus_ImageGetHeight($hImage),$Graph)
    _GDIPlus_GraphicsDispose($Graph)
    Return $hBitmap
    EndFunc

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

    _GDIPlus_Startup()

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

    $SRC = "49635_full.jpg"
    $DEST = "49635_full_flip.jpg"

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

    $hImage = _GDIPlus_ImageLoadFromFile($SRC)

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

    _GDIplus_ImageRotateFlip($hImage,$RotateNoneFlipX)

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

    _GDIPlus_ImageSaveToFile($hImage,$DEST)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()

    [/autoit]