1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. name22

Beiträge von name22

  • WinINet

    • name22
    • 28. Oktober 2011 um 19:14

    Das macht das ganze schon ein wenig einfacher. Du kannst ja den Text nach diesen Daten aufteilen und dann den alten Text Stück für Stück durchsuchen. Dann kann der Eintrag auch gleich an der richtigen Stelle eingefügt werden.

  • WinINet

    • name22
    • 28. Oktober 2011 um 18:43

    Eine genauere Beschreibung dessen, was du eigentlich machen willst, wäre sehr hilfreich. Nach welchem Muster sollen denn neue Sachen ergänzt werden, ist das überhaupt nötig (werden andere Dinge gelöscht)? Wie ist diese Datei aufgebaut? Wpher soll ein Programm wissen, was wo ergänzt werden muss? Und die FTPEx.au3 kannst du, auch wenn du nicht die Datei einfach ersetzen willst, verwenden. Das ist einfach übersichtlicher und einfacher.

  • GDI+ Spiel: AutoIt Arena Fight.

    • name22
    • 25. Oktober 2011 um 15:58
    Zitat

    Darf ich den Code etwas anpassen?


    Klar, solange du nicht einfach nur meinen Namen durch deinen Ersetzt (in dem Teil steckt nämlich ganz schön viel Arbeit) :P.

    Zitat

    Sorry, aber die Deklarationen am Anfang laden doch regelrecht dazu ein.


    Die waren auch dazu gedacht, weil ich das Spiel nie wirklich fertig bekommen hab. Die Attribute die für die Gegner bei jedem Level generiert werden waren am Anfang nur zu Testzwecken (ich wollte das später als Survival Modus drinlassen).

  • Der Gaming-Thread (nur für Freaks)

    • name22
    • 25. Oktober 2011 um 15:54
    Zitat

    aber ein richtiger Horror-Schocker fehlt mir schon in der heutigen Gameindustrie


    Ist zwar nicht wirklich ein ego-shooter, aber...

  • (Spiel) Wenn die Figur eine im Array gespeicherte Koordinate berührt, soll etwas Passieren

    • name22
    • 24. Oktober 2011 um 20:49

    Zumindest für den Anfang... Wenn du dich besser mit dem ganzen Zeug auskennst, kannst du es ja auf mehrere Ebenen erweitern.

  • (Spiel) Wenn die Figur eine im Array gespeicherte Koordinate berührt, soll etwas Passieren

    • name22
    • 24. Oktober 2011 um 20:41

    Dann wird das ganze schon wesentlich komplizierter, und ist (no offense) vermutlich über deinem Niveau.

  • (Spiel) Wenn die Figur eine im Array gespeicherte Koordinate berührt, soll etwas Passieren

    • name22
    • 24. Oktober 2011 um 20:23

    Wo liegt das Problem? Wenn die Figur auf X=6 ist, dann setze sie auf den entsprechenden Y-Wert. Wobei du noch das Array so filtern solltest, dass nur jeweils eine X Koordinate für den selben Wert existiert (nämlich die mit dem größten Y-Wert).

  • Bild Scannen (Schwarz-Weiß) und alle Koordinaten der schwarzen Pixel in eine .ini schreiben

    • name22
    • 23. Oktober 2011 um 22:20
    Zitat

    ja damit siehts so aus


    Nein tut es nicht.
    Es sieht so aus:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GdiPlus.au3>
    #include <Misc.au3>
    #include <Color.au3>

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

    $file = FileOpenDialog("SnakeLvLEditor", @DesktopDir &"\Eigene Programme\Snake", "Bilder (*.jpg)")
    $iniFile = StringReplace($file, ".jpg", ".ini")

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

    _GDIPlus_Startup()

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

    $hBitmap = _GDIPlus_BitmapCreateFromFile($file)
    $height = _GDIPlus_ImageGetHeight($hBitmap)
    $width = _GDIPlus_ImageGetWidth($hBitmap)

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

    Local $BitmapData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $width, $height, $GDIP_ILMREAD, $GDIP_PXF32RGB)
    Local $Stride = DllStructGetData($BitmapData, "Stride") ; Stride ist der Offset von einer Reihe zur nächsten
    Local $Scan0 = DllStructGetData($BitmapData, "Scan0") ; Die Bilddaten im Speicher
    Local $PixelData
    For $row = 0 To $height - 1 ; Reihe für Reihe
    For $col = 0 To $width - 1 ; Spalte für Spalte
    ; lese Farbinformation des aktuellen Pixels(Spalte,Reihe) aus
    $PixelData = DllStructCreate("dword", $Scan0 + ($row * $Stride) + ($col * 4))
    $Color = DllStructGetData($PixelData, 1)
    If $Color = 0 Then
    IniWrite($iniFile, "Pixel", $row, $col)
    EndIf
    Next
    Next
    _GDIPlus_BitmapUnlockBits($hBitmap, $BitmapData)

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

    _GDIPlus_Shutdown()
    MsgBox(0,"","fertig")

    [/autoit]


    Wo liegt das Problem?

  • Bild Scannen (Schwarz-Weiß) und alle Koordinaten der schwarzen Pixel in eine .ini schreiben

    • name22
    • 23. Oktober 2011 um 22:06
    Zitat

    klar sonst würd ich dich ja nich fragn :D


    Hast du den Beispielcode von mir übersehen? Das wäre zumindest schonmal ein Ansatz in die richtige Richtung.

  • Bild Scannen (Schwarz-Weiß) und alle Koordinaten der schwarzen Pixel in eine .ini schreiben

    • name22
    • 23. Oktober 2011 um 21:05
    Zitat

    irgendwas geht nicht aber ich weiß nich was (sonst würd ichs ja nicht schrieben^^)


    Ließt du meine Beiträge eigentlich? :rolleyes:

  • Bild Scannen (Schwarz-Weiß) und alle Koordinaten der schwarzen Pixel in eine .ini schreiben

    • name22
    • 23. Oktober 2011 um 19:31

    Zu Dlls und DllStructs? Das ist generell ein komplexeres Thema, aber BugFix hat einen Link zu seinem Tutorial in seiner Signatur.

  • Bild Scannen (Schwarz-Weiß) und alle Koordinaten der schwarzen Pixel in eine .ini schreiben

    • name22
    • 23. Oktober 2011 um 19:09

    Welche DLL? Es geht hier um ein DLL Struct. Stell es dir vor wie eine Ini Datei im Arbeitsspeicher. Die Funktion BitmapLockBits gibt ein DLLStruct, das die gesamten Farbdaten der Bitmap enthält zurück (und zwar in einer $tagGDIPBITMAPDATA Struktur). Was in dieser Struktur wo gespeichert ist, findest du in der Hilfe unter $tagGDIPBITMAPDATA. Wie du die Daten ausliest erfährst du aus dem Beispiel zu LockBits, oder auch aus der Hilfe zu DllStructGetData bzw. DllStructCreate.

  • Bild Scannen (Schwarz-Weiß) und alle Koordinaten der schwarzen Pixel in eine .ini schreiben

    • name22
    • 23. Oktober 2011 um 18:55
    Zitat

    Gibts da keinen Befehla ls ersatz O.o


    Nicht bei den internen Funktionen, und in den Standard UDFs ist so etwas auch nicht. Wozu auch? Es wird erwartet, dass du dir deine Befehle selbst erstellst. Oder würdest du als AutoIt Entwickler jede kleine Funktion die man möglicherweise nur in einem Script verwenden kann sofort als Standard Funktion aufnehmen?

  • Bild Scannen (Schwarz-Weiß) und alle Koordinaten der schwarzen Pixel in eine .ini schreiben

    • name22
    • 23. Oktober 2011 um 18:39

    ... Man sollte meinen, das die Kommentare als Beschreibung ausreichen...
    Willst du dein Bild auslesen oder einen Screenshot der nicht existiert?

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GdiPlus.au3>
    #include <Misc.au3>
    #include <Color.au3>

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

    $file = FileOpenDialog("SnakeLvLEditor", @DesktopDir &"\Eigene Programme\Snake", "Bilder (*.jpg)")
    $iniFile = StringReplace($file, ".jpg", ".ini")

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

    _GDIPlus_Startup()

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

    $hBitmap = _GDIPlus_BitmapCreateFromFile($file)
    $height = _GDIPlus_ImageGetHeight($hBitmap)
    $width = _GDIPlus_ImageGetWidth($hBitmap)

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

    Local $BitmapData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $width, $height, $GDIP_ILMREAD, $GDIP_PXF32RGB)
    Local $Stride = DllStructGetData($BitmapData, "Stride") ; Stride ist der Offset von einer Reihe zur nächsten
    Local $Scan0 = DllStructGetData($BitmapData, "Scan0") ; Die Bilddaten im Speicher
    Local $PixelData
    For $row = 0 To $height - 1 ; Reihe für Reihe
    For $col = 0 To $width - 1 ; Spalte für Spalte
    ; lese Farbinformation des aktuellen Pixels(Spalte,Reihe) aus
    $PixelData = DllStructCreate("dword", $Scan0 + ($row * $Stride) + ($col * 4))
    $Color = DllStructGetData($PixelData, 1)
    If $Color = 0 Then
    IniWrite($iniFile, "Pixel", $row, $col)
    EndIf
    Next
    Next
    _GDIPlus_BitmapUnlockBits($hBitmap, $BitmapData)

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

    _GDIPlus_Shutdown()
    MsgBox(0,"","fertig")

    [/autoit]
  • Bild Scannen (Schwarz-Weiß) und alle Koordinaten der schwarzen Pixel in eine .ini schreiben

    • name22
    • 23. Oktober 2011 um 18:26
    Zitat

    das brauch ihc doch garnich ich will das doch garnichmehr umrechnen in graustufen


    Dann lass es weg. Das hab ich in meinem Vorschlag auch gemacht :rolleyes: ...

  • Bild Scannen (Schwarz-Weiß) und alle Koordinaten der schwarzen Pixel in eine .ini schreiben

    • name22
    • 23. Oktober 2011 um 18:10
    Zitat

    Geht das nicht auch mit PixelSearch()?


    Das wäre die schlechteste Methode die du benutzen könntest...

    Zitat

    wie verarbeite ich das so, dass ichs als die Scan variable nehmen kann?


    Indem du den ganzen Code betrachtest, und nicht nur die For Schleife? Den Teil in der For Schleife musst du anpassen, aber ohne den Rest funktioniert das ganze natürlich nicht.
    Du musst einfac nur das geladene Bild (_ImageLoadFromFile) bei dem BitmapLockBits Befehl einsetzen.

  • Bild Scannen (Schwarz-Weiß) und alle Koordinaten der schwarzen Pixel in eine .ini schreiben

    • name22
    • 23. Oktober 2011 um 17:54
    Zitat

    wi ersetze ich die varbiablen $Scan und $Stride dementsprechend?


    Wozu? Das einzige was du verändern musst, ist der Code zwischen Zeile 5 und 10. Z.B. so:

    [autoit]

    For $row = 0 To $Height - 1 ; Reihe für Reihe
    For $col = 0 To $Width - 1 ; Spalte für Spalte
    ; lese Farbinformation des aktuellen Pixels(Spalte,Reihe) aus
    $PixelData = DllStructCreate("dword", $Scan0 + ($row * $Stride) + ($col * 4))
    $Color = DllStructGetData($PixelData, 1)
    If $Color = 0 Then
    $xPixel = $row
    $yPixel = $col
    EndIf
    DllStructSetData($PixelData, 1, BitOR($Luma, BitShift($Luma, -8), BitShift($Luma, -16)))
    Next
    Next

    [/autoit]


    Statt die Werte in $xPixel etc. zu speichern, speicherst du sie dann eben in einem Array, oder einer ähnlichen Datenstruktur.

  • Bild Scannen (Schwarz-Weiß) und alle Koordinaten der schwarzen Pixel in eine .ini schreiben

    • name22
    • 23. Oktober 2011 um 17:42

    Ja, genau.

  • Bild Scannen (Schwarz-Weiß) und alle Koordinaten der schwarzen Pixel in eine .ini schreiben

    • name22
    • 23. Oktober 2011 um 17:22

    Bild mit

    [autoit]

    _GDIPlus_ImageLoadFromFile

    [/autoit]

    laden, und dann mit

    [autoit]

    _GDIPlus_BitmapLockBits

    [/autoit]

    auslesen. In der Hilfe zu BitmapLockBits ist ein Beispiel, wo ein Bild in sein Graustufenäquivalent umgewandelt wird. Im Prinzip musst du es nur so umschreiben, dass die Farbe der ausgelesenen Pixel mit 0x000000 verglichen wird und bei übereinstimmung die Koordinaten in ein Array eintragen.

  • Fragen bzgl. GUICtrlCreateInput, IniRead, Do - Until und Pause

    • name22
    • 22. Oktober 2011 um 14:16

    Ich sehe beim Iniread keinen Fehler, wenn er beim speichern eine Ini erstellt, dan sollte er die auch wieder genauso einlesen.

    Zitat

    $Zeit >1 OR < 1


    Das alleine sollte schon ausreichen um eine Errormeldung zu erzeugen... Wenn dann IsNumber($Zeit).
    Und das Script unterbrechen kannst du z.B. mit einer Endlosschleife (mit Sleep(10)) die ggf. per ExitLoop beendet wird.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™