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.
Beiträge von name22
-
-
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.
-
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.ZitatSorry, 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). -
Zitat
aber ein richtiger Horror-Schocker fehlt mir schon in der heutigen Gameindustrie
-
-
-
-
Zitat
ja damit siehts so aus
Nein tut es nicht.
Es sieht so aus:Spoiler anzeigen
[autoit]#include <GuiConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GdiPlus.au3>
#include <Misc.au3>
#include <Color.au3>$file = FileOpenDialog("SnakeLvLEditor", @DesktopDir &"\Eigene Programme\Snake", "Bilder (*.jpg)")
[/autoit] [autoit][/autoit] [autoit]
$iniFile = StringReplace($file, ".jpg", ".ini")_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hBitmap = _GDIPlus_BitmapCreateFromFile($file)
[/autoit] [autoit][/autoit] [autoit]
$height = _GDIPlus_ImageGetHeight($hBitmap)
$width = _GDIPlus_ImageGetWidth($hBitmap)Local $BitmapData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $width, $height, $GDIP_ILMREAD, $GDIP_PXF32RGB)
[/autoit] [autoit][/autoit] [autoit]
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)_GDIPlus_Shutdown()
[/autoit]
MsgBox(0,"","fertig")
Wo liegt das Problem? -
-
-
-
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.
-
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? -
... 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>
[/autoit] [autoit][/autoit] [autoit]
#include <GdiPlus.au3>
#include <Misc.au3>
#include <Color.au3>$file = FileOpenDialog("SnakeLvLEditor", @DesktopDir &"\Eigene Programme\Snake", "Bilder (*.jpg)")
[/autoit] [autoit][/autoit] [autoit]
$iniFile = StringReplace($file, ".jpg", ".ini")_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hBitmap = _GDIPlus_BitmapCreateFromFile($file)
[/autoit] [autoit][/autoit] [autoit]
$height = _GDIPlus_ImageGetHeight($hBitmap)
$width = _GDIPlus_ImageGetWidth($hBitmap)Local $BitmapData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $width, $height, $GDIP_ILMREAD, $GDIP_PXF32RGB)
[/autoit] [autoit][/autoit] [autoit]
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)_GDIPlus_Shutdown()
[/autoit]
MsgBox(0,"","fertig") -
-
Zitat
Geht das nicht auch mit PixelSearch()?
Das wäre die schlechteste Methode die du benutzen könntest...Zitatwie 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. -
Zitat
wi ersetze ich die varbiablen $Scan und $Stride dementsprechend?
[autoit]
Wozu? Das einzige was du verändern musst, ist der Code zwischen Zeile 5 und 10. Z.B. so:For $row = 0 To $Height - 1 ; Reihe für Reihe
[/autoit]
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
Statt die Werte in $xPixel etc. zu speichern, speicherst du sie dann eben in einem Array, oder einer ähnlichen Datenstruktur. -
-
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.
-
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.