pixelgröße eines bildes verändern...

  • hi leute,

    kennt einer von euch einen "befehl" oder so womit man die pixelgröße eines bildes verändern kann.
    (also eine art converter)

    beispiel:
    [vorher] lol.bmp 500x500
    [umwandeln]
    [nachher] lol.bmp 240x240

    geht das?

    mb team2way

  • ok klar ich kenn auch viele von den tools...aber wollt mal wissen ob man das auch mit autoit umsetzen kann :D

  • Hi

    Ja, es geht:

    [autoit]

    #include <GdiPlus.au3>

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

    Global $sFile = FileOpenDialog("Wähle Bild aus...", @WorkingDir, "(*.bmp)(*.jpg)(*.tif)", 1)
    Global $sExt = StringRight($sFile, 3)
    Global $iWidth = 400
    Global $iHeight = 300

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

    _GDIPlus_Startup()
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)
    _GDIPlus_GraphicsDispose($hGraphics)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    $hImage = _GDIPlus_ImageLoadFromFile($sFile)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, 0, 0, $iWidth, $iHeight)
    _GDIPlus_ImageSaveToFile($hBitmap, StringTrimRight($sFile, 4) & "_resized." & $sExt)

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

    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()

    [/autoit]

    Allerdings wird das Ziel aus dem Desktop erstellt und deshalb hat man dann 96 Dpi Auflösung, egal wieviel Dpi das Original hatte...
    Ist aber nur relevant, wenn man mit mm statt px arbeiten will...

    lgE

  • Hi nochmals

    Da ich für mein aktuelles Projekt eine Funktion brauche, welche die Dpiauflösung verändern kann, hab ich nun diese Funktion geschrieben:

    [autoit]

    Func _GDIPlus_BitmapSetResolution($hBmp, $iDpiX, $iDpiY)
    Local $aResult
    $aResult = DllCall($ghGDIPDll, "int", "GdipBitmapSetResolution", "ptr", $hBmp, "float", $iDpiX, "float", $iDpiY)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError($aResult[0], 0, $aResult[0])
    EndFunc ;==>_GDIPlus_BitmapSetResolution

    [/autoit]


    d.h. Mein Beispiel von oben soll nun so aussehen:

    [autoit]

    #include <GdiPlus.au3>

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

    Global $sFile = FileOpenDialog("Wähle Bild aus...", @WorkingDir, "(*.bmp)(*.jpg)(*.tif)", 1)
    If @error Then Exit
    Global $sExt = StringRight($sFile, 3)
    Global $iWidth = 400
    Global $iHeight = 300

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

    _GDIPlus_Startup()
    Global $hImage = _GDIPlus_ImageLoadFromFile($sFile)
    Global $iOrigDpiX = _GDIPlus_ImageGetHorizontalResolution($hImage)
    Global $iOrigDpiY = _GDIPlus_ImageGetVerticalResolution($hImage)

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

    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)

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

    _GDIPlus_BitmapSetResolution($hBitmap, $iOrigDpiX, $iOrigDpiY)

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

    _GDIPlus_GraphicsDispose($hGraphics)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, 0, 0, $iWidth, $iHeight)
    _GDIPlus_ImageSaveToFile($hBitmap, StringTrimRight($sFile, 4) & "_resized." & $sExt)

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

    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()

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

    Func _GDIPlus_BitmapSetResolution($hBmp, $iDpiX, $iDpiY)
    Local $aResult
    $aResult = DllCall($ghGDIPDll, "int", "GdipBitmapSetResolution", "ptr", $hBmp, "float", $iDpiX, "float", $iDpiY)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError($aResult[0], 0, $aResult[0])
    EndFunc ;==>_GDIPlus_BitmapSetResolution

    [/autoit]

    lgE

  • ein fettes THX!!!

    bei mir kommt allerding ab zeile 11 dieser fehler:

    [autoit]

    Global $iOrigDpiX = _GDIPlus_ImageGetHorizontalResolution($hImage)
    Global $iOrigDpiY = ^ ERROR

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

    Error: Unkonown funktion name.

    [/autoit]


    cya team2way

    Einmal editiert, zuletzt von team2way (7. März 2009 um 13:14)

  • Welche Autoit-Version hast du denn?
    Habs gerade getestet, mit AutoIt V3.3.0.0 gehts.

    Gruß Ashpool

    Zitat von mir

    Bin immer wieder erstaunt, wie begrenzt ein Horizont sein kann.

  • ka wo sieht man das...ich installiers einfach noch mal neu :D

    ahh ok habs grad gesehn ich hab noch version 3.2.1.0