Bilder: Hex-Bilder erstellen oder per GDI+ "ausschneiden"?

  • Hallo,

    ich habe da mal eine Frage.
    Achtung, ich habe BEWUSST KEINEN Code beigelegt, um unnötige Antworten zu minimieren!

    Frage:
    Ich möchte für ein Spiel ( *hust*Arengu*hust* ) ein neues Bild-System machen: Welche Möglichkeiten sind besser?
    1.) Mehrere ( so 50 ) Bilder als Hexadezimalen Code speichern ( meinetwegen in einer *.txt Datei ) und dann im Tempörären Verzeichnis erstellen und DANN verwenden,
    ODER

    2.) Ein großes Bild machen, wo dann jeweils kleine Bilder drin sind, die man dann mit GDI+ ausschneiden muss ( siehe Minecraft: terrain.png, also so:
    ----------.----------
    | Bild 1 | Bild 2 |
    | | |
    ----------.----------
    | Bild 3 | Bild 4 |
    | | |
    ----------.----------
    Jedes dieser 4 Bilder sind teil EINES Bildes ( ich hoffe ihr wisst, was ich meine ).

    ALSO, was ist schneller, besser, effektiver, etc.?

    mfg
    Hauke

  • Wieso willst du denn die Grafiken in einer Txt als Binärcode abspeichern? Wenn es "Schützen" soll die Dateien zu modden dann ist es nicht sehr gut (Und für dich schwerer zu bearbeiten)
    Ich empfehle die 1-Bild Methode (Hab ja auch mal eine kleine UDF dafür gepostet :whistling: ) Aber je nach größe des Bildes kann es dann schon eine Weile dauern bis alle Pixel durchlaufen sind. Für ein Bild mit 30 kleinen Bildern die alle 500x500 Pixel haben bräuchte meine Funktion sicher sehr lange. Es gibt natürlich die Möglichkeit das alles über FASM etc zu verschnellern.

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Danke für deine Antwort! :D

    Also das mit der Textdatei war nur sone Idee, ich glaub ich mach das ganze dann in den Code rein ( wie du schon gesagt hast: sicherer ). Das mit dem bearbeiten macht nix ( würde alle fertig machen und DANN converten.
    Zu den Einzelbildern. Die Einzelbilder sind alle entweder 40x40 oder 48x48 Pixel groß ( hab mich noch für kein Maß entschieden )), von daher denke ich, dass es recht schnell geht. Die gebrauchten auszuschneiden ( sind, wenns hochkommt MAXIMAL 20, eher so 10-15 UNTERSCHIEDLICHE ).

    Hat jemand schon erfahrungen was denn schneller ist ( bei z.B. 48x48 Pixel grafiken und 20 verschiedene? )
    Ich tendiere ja zu dem mit dem Hex-Code ( ist weniger arbeit ;) )

    mfg
    Hauke

  • Die Frage ist dann natürlich: 20 Hex Codes oder wiederum nur ein Binärcode mit den 20 Bildern ;) Man kann es ja kombinieren, also das "Massenbild" als Binärstring in den Quellcode abspeichern, dafür gibts viele Funktionen im Forum, ich benutze immer die von BF.

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Ich binde Bilder immer als Hexstring über ein Include ein.
    #include <res.au3>

    Dann kann ich per Res(5) z.B. Ressource nr. 5 Aufrufen.
    So kann man so ziemlich alles includen was man will.
    Da man bilder auch ohne Tempdateien direkt laden kann bietet sich das an finde ich, da man so nur eine einzige Datei für das gesamte Spiel braucht.

    Iwann hab ich dann mal Base64 entdeckt und hab angefangen das zu nutzen. Das Prinzip hat sich aber nicht verändert.

    Über ein Großes .png Bild ist es aber vermutlich am flexibelsten. Bis man erstmal iwelche Bilder in Includes getauscht hat vergeht schon etwas Zeit.
    In einem Bild kann man aber relativ schnell alles verändern.

    Aus dem Sammelbild den kleinkram auszuschneiden dürfte extrem schnell gehen.
    (dazu nutze ich natürlich die imageudf :P Die Funktion braucht nur wenige zehntel ms)

    Spoiler anzeigen
    [autoit]

    Func _Image_CopyArea($vImg, $iX, $iY, $iB, $iH)
    Local $vRet = _Image_Create($iB, $iH)
    DllCall($__avDLL[$__MSIMG32], 'int', 'AlphaBlend', 'ptr', DllStructGetData($vRet, 1, 1), 'int', 0, 'int', 0, 'int', $iB, 'int', $iH, 'ptr', DllStructGetData($vImg, 1, 1), 'int', $iX, 'int', $iY, 'int', $iB, 'int', $iH, 'dword', $__avBlendFunction[255])
    Return $vRet
    EndFunc ;==>_Image_CopyArea

    [/autoit]

    lg
    M