Ich habe H2112 beim Wort genommen und das ganze um Rechtecke/Quadrate und Ellipsen/Kreise erweitert.
Siehe Post#1
Beiträge von name22
-
-
Ich hab dein Script gleich mal in die neue Version mit eingebaut. Jetzt ist das schon um einiges schneller
, aber mit Assembler hab ich nichts am Hut 8|. -
Zitat
Naja nette Idee aber überflüssig wie ich finde. Es gibt zich Tausend Bildbearbeitungsprogamme.
Das ist mir klar, aber ich habe es einfach nur aus Spaß geschrieben
Ich benutze schließlich auch PaintShopPro und nicht dieses Programm
-
Ich hab dem ganzen jetzt noch ein paar Extras hinzugefügt und es als eine Art Paint gstaltet.
Siehe neuer Thread -
Ein einfaches und leider teilweise noch verbuggtes Paint mit folgenden Funktionen:
Spoiler anzeigen
-Freihand zeichnen
-Linien zeichnen
-Pipette
-Eine etwas übereifrige Füllfunktion
-Farben invertieren
-in Graustufen umwandeln
-Schwarzweiß umwandler
-History und Undo/Redo Funktionen
-ToolBox zum verändern der Pen Eigenschaften etc.
-Menü zur Auswahl zwischen den Extrasweitere Funktionen Folgen...
Hoffe auf Lob und konstruktive Kritik
Edit: Die Toolbar Funktionen sind absichtlich ausgeklammert (bin noch auf der suche nach passenden Icons).
Changelog: 1.1
Spoiler anzeigen
-Ich verwende jetzt Prog@ndys Methode um die Invertierung durchzuführen (vielen Dank übrigens).
-Jetzt sind auch die Werkzeuge Ellipse/Kreis und Rechteck/Quadrat vorhanden (Strg füllt die Objekte aus, und Shift Wandelt jeweils Ellipse in Kreis und Rechteck in Quadrat um)
Changelog: 1.2Spoiler anzeigen
-Invert und Graustufen umwandlung, nun mit ColorMatrix umgesetzt (schnellere Berechnung)
-
Kein Problem
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]$hWnd = GUICreate("Test", 400, 200)
[/autoit] [autoit][/autoit] [autoit]
$Input1 = GUICtrlCreateInput("", 0, 0)
$Button1 = GUICtrlCreateButton("Speichern", 0, 100)
GUISetState()While 1
[/autoit]
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$File = FileOpen(@ScriptDir & "\Data.txt", 1)
FileWrite($File, GUICtrlRead($Input1) & @CRLF)
FileClose($File)
EndSwitch
WEnd
Wozu brauchst du das ganze? Möchtest du die Daten davor schützen einfach ausgelesen zu werden? Dazu könnte man sie nämlich auch mit StringEncrypt verschlüsseln. -
-
Als ani Files könnte man damit was anfangen
, aber in Scriptform...
Trotzdem schönes Script
-
Wie merkst du das denn das der geht?
Wenn die Maus bei mir auf den Desktop klickt ist das kaum zu übersehen^^ -
Ich verstehe nicht was du hast, der Klick funktioniert bei mir.
Nur das WinActivate nicht, schließlich heißt mein Firefox Fenster zu keiner Zeit "Firefox".
-
Zitat
Nein ein Bot was die Metin2 Seite aufruft und von allen Servern den Besten mir in einer GUI ausgibt.
War es das vorher auch schon? Wenn ja verstehe ich nicht wieso du dann deinen 1.Post editierst, dass keinerlei Wörter wie Metin2 oder Bot mehr enthalten sind.
Redest du von der offiziellen Metin2 Seite? Soweit ich weiß gibt es da nämlich nur einen Server
Von allen Servern den besten? Nach welchen Kriterien
Und ob das nun verboten ist oder nicht, kannst du in den AGBs der jeweiligen Seiten nachlesen.

-
Es funktioniert beides, aber ich glaube H2112's Version ist einfacher zu verstehen.

-
Update siehe Post#1
-Kleinere Bugs beseitigt
-Undo/Redo Funktionen funktionieren jetzt größtenteils perfekt
Es gibt allerdings weiterhin Probleme mit PNGs...
-
Habe jetzt immerhin eine halbwegs funktionierende Undo/Redo Funktion zustande gebracht.
Jetzt mach ich erstmal Pause, mein Kopf raucht schon. :wacko: -
Zitat
Wie kann man so in roter farbe am besten mit GDI+ schreiben?
wenn ich das als label für die Gui mache kommt sofort der hintergrund darüber
-,-
Dafür gibt es ja _GDIPlus_GraphicsDrawString und _GDIPlus_GraphicsDrawStringEx, einfach mal in der Hilfe nachschlagen.
Warum du "dein" Script aus dem 1.Post löschst verstehe ich auch nicht.
Setze doch einfach das Präfix dieses Threads auf "gelöst" wenn du der Meinung bist das alles geklärt wurde. -
Um bei GDI+ Spielen irgendwelche begrenzungen o.Ä. einzufügen musst du einfach die Koordinaten überprüfen und gegebenenfalls neusetzen.
[autoit]
z.B.If $X >= $Levelwidth Then $X = 0
[/autoit]für die Begrenzung nach rechts.
P.s. Ich weiß nicht wie gut du dich mit GDI+ auskennst, aber wie wäre es mit etwas einfacherem um erstmal zu verstehen was du da eigentlich machst.
-
Zitat
Bei einer PNG schmiert das Skript ab!
Das liegt vermutlich am Alphachannel, ich werde mich mal darum kümmern.
Bei PNGs ohne Transparenz funktioniert alles wie gewollt.Edit: Das wird wohl schwieriger als ich dachte... Ich kann zwar den Alphachannel auslesen, aber weiß nicht was ich damit tun soll, bzw. können _ColorGetRed etc. damit natürlich nichts anfangen.

-
So. Neue Version siehe Post#1
-
Das hat irgendwas mit Bits zu tun
Und lässt sich ganz einfach mit _ColorGetRed, _ColorGetGreen und _ColorGetBlue bzw. _ColorGetRGB umwandeln. -
Ein einfaches Script um Bilder zu öffnen, deren Farben zu invertieren und in einem beliebigen Format wieder zu speichern.
Funktionsweise:
-Bild wird mit _GDIPlus_BitmapCreateFromFile geladen und in eine Bitmap umgewandelt
-Mit _GDIPlus_BitmapLockBits werden die Pixeldaten in einem DLLStruct gespeichert oder so ähnlich
-Danach wird die Pixelfarbe jedes einzelnen Pixels eingelesen und durch das exakte gegenstück ihrer RGB Werte ersetzt
-Dann werden die Änderungen an den Pixeln der Bitmap mit _GDIPlus_BitmapUnLockBits übernommen
-Das ganze wird in ein GUI gezeichnet und in beliebigem Dateiformat gespeichert.Spoiler anzeigen
[autoit]#include <WindowsConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
#include <GDIPlus.au3>
#include <Color.au3>_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hBitmap = _GDIPlus_BitmapCreateFromFile(FileOpenDialog("Datei auswählen", @ScriptDir, "Bilder (*.jpg;*.jpeg;*.png;*.bmp;*.gif)", 3))
[/autoit] [autoit][/autoit] [autoit]
$iWidth = _GDIPlus_ImageGetWidth($hBitmap)
$iHeight = _GDIPlus_ImageGetHeight($hBitmap)$BitmapData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $iWidth, $iHeight, BitOR($GDIP_ILMREAD, $GDIP_ILMWRITE), $GDIP_PXF32RGB)
[/autoit] [autoit][/autoit] [autoit]
$Scan = DllStructGetData($BitmapData, "Scan0")
$Stride = DllStructGetData($BitmapData, "Stride")HotKeySet("{ESC}", "_Abort")
[/autoit] [autoit][/autoit] [autoit]ProgressOn("Color Inverter (Abbrechen mit Escape)", "Fortschritt:", "Pixel werden gescannt...")
[/autoit] [autoit][/autoit] [autoit]
For $iY = 0 To $iHeight - 1
For $iX = 0 To $iWidth - 1
$PixelData = DllStructCreate("dword", $Scan + ($iY * $Stride) + ($iX * 4))
$Color = DllStructGetData($PixelData, 1)
DllStructSetData($PixelData, 1, BitOR(255 - _ColorGetRed($Color), BitShift(255 - _ColorGetGreen($Color), -8), BitShift(255 - _ColorGetBlue($Color), -16)))
Next
ProgressSet($iY * 100 / ($iHeight - 1))
Next
ProgressOff()_GDIPlus_BitmapUnlockBits($hBitmap, $BitmapData)
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{ESC}")
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("{S}", "_Save")$hWnd = GUICreate("Farben invertiert (Speichern mit 'Shift + s')", $iWidth, $iHeight)
[/autoit] [autoit][/autoit] [autoit]
GUISetState()$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iWidth, $iHeight)GUIRegisterMsg($WM_PAINT, "WM_PAINT")
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
Exit
Case $GUI_EVENT_RESTORE
WM_PAINT()
EndSwitch
WEndFunc _Abort()
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_AbortFunc _Save()
[/autoit] [autoit][/autoit] [autoit]
$sFileDest = FileSaveDialog("Speichern unter", @ScriptDir, "Bilder (*.jpg;*.jpeg;*.png;*.bmp;*.gif)", 18)
If @error Or $sFileDest = "" Then Return
$sExt = StringTrimLeft($sFileDest, StringInStr($sFileDest, ".", 0, -1))
If Not ($sExt = "jpg" Or $sExt = "jpeg" Or $sExt = "png" Or $sExt = "bmp" Or $sExt = "gif" Or $sExt = "jpg\" Or $sExt = "jpeg\" Or $sExt = "png\" Or $sExt = "bmp\" Or $sExt = "gif\") Then Return MsgBox(16, "Fehler", "Bitte gültige Dateiendung angeben")
_GDIPlus_ImageSaveToFile($hBitmap, $sFileDest)
EndFunc ;==>_SaveFunc WM_PAINT()
[/autoit]
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iWidth, $iHeight)
EndFunc ;==>WM_PAINT
ChangeLog:Spoiler anzeigen
1.1:
-GUI
-Undo/Redo Funktionen
-Graustufen umwandler
-Schwarweiß umwandler
-Färbe Funktion