Mit gdiplus Bilder zusammenfügen

  • Hallo,

    ich habe schon ein wenig gegoogelt und überlegt, aber ich habe nirgendwo gefunden wie man mehrere Bilder zu einer Bilddatei, welche sich lediglich in der Höhe verändert, zusammenfügt.. Für ein kleines Beispiel wäre ich sehr dankbar.

    Lg

  • "Erstelle ein Bitmap" Wie? Per Hand ? Per irgendeiner Funktion? Wenn ja, mit welcher? mit "_GDIPlus_BitmapCreateFromGraphics " ? Wenn ja, woher kommt das Graphikobjekt? Also nein. Es muss ja aus dem Nichts etwas gezeichnet werden. Oder zeichne ich ein Rechteck und fülle es mit weißer Farbe? Keine Ahnung, ein wenig mehr wär hilfreich um nicht im Trüben zu fischen.. danke

    Edit:

    Ich vermute das Beispiel in der UDF-Hilfe für die Funktion
    Funktion _GDIPlus_GraphicsDrawImageRect entspricht dem, was ich suche..

    Einmal editiert, zuletzt von abc-user (9. Juli 2010 um 14:04)

  • [autoit]


    #include <GDIPlus.au3>
    _gdiplus_graphicscreatefromhwnd
    _gdiplus_bitmapcreatefromgraphics
    _gdiplus_imagegetgraphicscontext
    _gdiplus_graphicsdrawimagerect
    _gdiplus_graphicsdispose
    _gdiplus_bitmapdispose
    _gdiplus_imageloadfromfile
    _gdiplus_imagedispose

    [/autoit]


    Ich hoffe das reicht (drauf klicken gibt Hilfe)

  • Hey ho,

    folgenden Problem.. wenn ich ein Bild habe und dort ein weiteres Bild darunter ranhängen möchte, dann wird ja das Originalbild nicht auf die neue größe Vergrößert, die es benötigen würde, um vollständig dargestellt zu werden.

    Was ich bräuchte, wäre also etwas á la:
    Leeres Rechteck erzeugen und Bild einfügen
    Maße des Erzeugten Rechtecks und Maße des einzufügenden Bildes ermitteln
    Neues Rechteck mit den zu benötigenden Maßen erstellen und einzufügendes Bild einfügen.

    Und so weiter..

    Wie erstelle ich ein "Weißes Rechteck" ?

    lg

  • Hier ein kleines Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <GDIplus.au3>
    Global $image = FileOpenDialog("Bild auswählen", @ScriptDir & "\", "Images (*.jpg;*.bmp;*.png)")
    If @error Then Exit
    _GDIPlus_Startup()
    Global $bitmap_from_file = _GDIPlus_BitmapCreateFromFile($image)
    Global Const $iX = _GDIPlus_ImageGetWidth($bitmap_from_file)
    Global Const $iY = _GDIPlus_ImageGetHeight($bitmap_from_file)
    Global Const $width = $iX
    Global Const $height = 2 * $iY
    Global $hwnd = GUICreate("Clone Y", $width, $height)
    Global $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    Global $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics)
    Global $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    _GDIPlus_GraphicsDrawImage($backbuffer, $bitmap_from_file, 0, 0)
    _GDIPlus_GraphicsDrawImage($backbuffer, $bitmap_from_file, 0, $iY)
    GUISetState()

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

    Do
    _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height)
    Until GUIGetMsg() = -3 * Sleep(30)

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

    _GDIPlus_ImageSaveToFile($bitmap, @ScriptDir & "\Test.bmp")
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_Shutdown()

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

    GUIDelete($hwnd)
    Exit

    [/autoit]

    Hausaufgabe: den Code erweitern, indem du ein zweites Bild aussuchst und es unter das erste Bild kopierst ;)

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Dankeschön, soweit so gut..

    allerdings habe ich noch immer ein Problem !

    Jedes Bild hat die größe 1200x1700 ( etwas kleiner). In dem erstellten Bild, ist das Bild aber aufeinmal nur noch halb so groß?

    Hier mein Code:

    Spoiler anzeigen
    [autoit]

    #include <GDIplus.au3>
    Global $image = StringSplit(FileOpenDialog("Bild auswählen", @ScriptDir & "\", "Images (*.jpg;*.bmp;*.png)",1+4), "|")
    If @error Then Exit
    _GDIPlus_Startup()

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

    Global Const $width = 1200
    Global Const $height = ($image[0]-1) * 1700

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

    Global $hwnd = GUICreate("Clone Y", $width, $height)
    Global $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    Global $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics)
    Global $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)

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

    for $i = 2 to $image[0]
    $bitmap_from_file = _GDIPlus_BitmapCreateFromFile($image[1]&"\"&$image[$i])
    if $i = 2 then
    _GDIPlus_GraphicsDrawImage($backbuffer, $bitmap_from_file, 0, 0)
    $iY = 1700
    else
    _GDIPlus_GraphicsDrawImage($backbuffer, $bitmap_from_file, 0, $iY)
    $iY = $iY + 1700
    endif

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

    next

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

    _GDIPlus_ImageSaveToFile($bitmap, @ScriptDir & "\Test.jpg")
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_Shutdown()

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

    GUIDelete($hwnd)
    Exit

    [/autoit]