SetColor

  • Soo...endlich kann ich hier mal was posten :)

    Wäre es möglich aus einem Bild die Farbe zu lesen (ich denk schon...einfach das bild innem GUI öffnen und dann PixelGetColor machen...) und es dann ggf verändern?

    Also so eine Function wie zB SetPixelColor? :\
    Ich glaubs eher net aber vllt kann man da via DllCalls was regeln

    Das wäre sehr nützlich für eine Sache die ich machen möchte...näheres folgt später (wenn ich mehr Zeit hab)

    Danke schonmal :]

  • Jo hab schon dannach gesucht, aber ich wurde nur fündig von Scripten wo sie auf ein Fenster was malten (also quasi nur aufgesetzt) und ich will ja richtig die *.bmp datei umschreiben.

    [edit:] Also so ein Noob bin ich wirklich nicht ;)
    Hab schon einige Programme hinter mir, nur finde ich keine Funktion direkt ein Bitmap umzuschreiben. ;)

    Achja...was ich damit machen will:

    Eine Art De- und Encrypter. Wie soll der gehen?

    Naja...Man öffnet ein Bild, welches dann in einem GUI angezeigt wird. Dannach gibt man den Text ein der verschlüsselt und versteckt werden soll. Der Script schaut erstmal die Länge des Strings an, und verwandelt diese Zahl in eine HexZahl die dann der Farbe des letztens Pixels entspricht...Ah hört sich kompliziert an ^^

    Beispiel:
    Bild öffnen (Größe 400x400)
    Text eingeben (AutoIt rocks)
    $len = StringLen("AutoIt rocks")
    $len in Hex umwandeln...also 00000C
    die Farbe vom Pixel an der Position 400x400 ändern in 00000C.

    So...das brauch ich um Später die Buchstaben zu finden ;)

    Jetzt kommt der 2te kompliziertere Teil:

    Er nimmt jetzt jeden einzelnen Buchstaben und platziert diese in einem bestimmten Abstand...Das ist dann abhängig von der Bildgröße und Textlänge. Man könnte den Buchstaben und Zahlen ganz simpel Farben zuordnen, dies würde aber bei einem Bild ziemlich stark auffallen, wenn da plötzlich bunte Punkte sind :tongue: ).
    Darum kriegt jeder Buchstabe und jede Ziffer nicht nur eine Farbe zugeordnet, sondern viele (hab da schon eine Idee wie ich das mach).

    Beispiel:
    Wir wollen den Buchstaben "A" von "AutoIt rocks" positionieren.
    Dazu sucht der Script erstmal die Position (das Verfahren denk ich mir später aus ;) )
    Dannach wird die Farbe gelesen...Sagen wir mal es handelt sich um FF00FF.
    Das große "A" ist bei mir Zeichen Nummer 27 von 64.
    Also mach ich sowas:
    Mod(Dec(PixelGetColor($posx,$posy)) ,64)..Damit schau ich nach, welches Zeichen momentan drauf ist. Bei FF00FF würde es also 3 machen >> ein "c". Da ich aber 27 haben will, muss ich 64-27 rechnen und es von unserer ursprünglichen Farbe (FF00FF) abziehen, was dann FF00DA ergibt.
    Hätte ich eine statische Farbe, dann würde es dem User stärker auffallen (zB ein knalles Gelb für "A"..)

    Vllt gibt es noch besser Wege es zu machen, dass mand ie Farbe kaum unterscheiden kann. Hab mich mir der Farblehre noch net so beschäftigt (auch wenn ich Graphiker werden will xD)

    Also ich hoffe mir kann geholfen werden, weil ich grad ca 40 Minuten meines Lebens geopfert hab ^^

    2 Mal editiert, zuletzt von XxXFaNtA (29. Juni 2006 um 20:03)

  • Oh sry...mein Fehler..natürlich ist es 00000C (ist ja RRGGBB)...

    Danke für den Hinweis ^^ auch wenn mich das zur Lösung meines Problems nicht weiter verhilft ^^

    Aber wer würde schon nach Passwörtern in einem Bild suchen? 8)

  • Ah..ich werd's mir mal anschauen..schon mal vielen dank :]

    (ich dachte zuerst, es handle sich einfach um eine Art BitMap sammel-mappe xD)

  • Sry für Doppelpost aber wollte nur mal sagen, dass du der beste bist im auffinden von Topics :klatschen:

    Momentan hab ich da noch paar Fehler mit dem GUI also programmier ich das erstmal in 2 Scripten (einer zum encodieren einer zum decodieren...)

    Ich melde mich dann wieder wenn ich damit fertig bin :)

    Edit:

    Bah...eine Frage noch...Weiß jemand durch Zufall, wie ich die Größe (also die Dimension) eines Bildes herausbekomme?

    Danke ^^

    Einmal editiert, zuletzt von XxXFaNtA (30. Juni 2006 um 18:04)

    • Offizieller Beitrag

    Das auslesen der Grafikgrösse könnte mit der GDI32.DLL gehen, da kann dir evtl. @pastl helfen der hat das Tool ScreenShot programmiert und nutzt da auch schon Funktionen aus der DLL.

  • Naja die Position und größe eines Fensters ist ja kein Problem herauszubekommen...aber von so einer BitMap Datei? :\

    Aber ich schau bei msdn...vllt lässt sich da ja wirklich was machen...

    Ansonsten hab ich grad ein kleines Problem...ich hab bissl getrunken wegen Fussball und hab nun meinen Algorithmus verhauen und weiß net, wie ich das verbessern kann...


    Encoder (bissl umständlich...wird aber später einfacher gemacht...keine Angst ;)

    Und hier noch der Decoder


    Das problem ist der Encoder bei

    Code
    $letcol = Chr(Mod(Dec($color),57)+65)
    $lettercolor = Hex(Dec($color)-(122-Asc($letter)),6)

    Ich hoffe da kann mir einer weiterhelfen :)

    • Offizieller Beitrag

    Ich habe mir mal die Funktion _BMPOpen angeschaut. Die Breite und Höhe kannst du nach dem öffnen so auslesen

    Code
    $breite = UBound($bmphandle,1)
    $hoehe = UBound($bmphandle,2)

    Es kann ja sein das dein Encoder nicht funktioniert. Aber selbst wenn ich eine Bitmap öffne und gleich wieder schreibe kommt bei mir keine brauchbare Bitmap mehr raus:

    Code
    #include <BMP.au3>
    
    
    $bmppath = FileOpenDialog("Search the BitMap you want to En-/DeCode", @ScriptDir, "Images (*.bmp)", 1 + 2 )
    $bmphandle = _BMPOpen($bmppath)
    
    
    _BMPWrite($BMPHandle,@scriptdir &"\encoded.bmp")
    MsgBox(0,"Done","Work done ;)")
    Exit

    Da muss also in der BMP.au3 schon ein Fehler sein.

  • Ne bei mir geht das ja

    Also wenn ich zB den ersten Pixel beschreibe, dann kommt da dasselbe mit Bild nur halt mit dem veränderten ersten Pixel raus :>

    • Offizieller Beitrag

    Wie gross ist den dein Bitmap, wenn ich mit 128x128 oder mit 256x256 arbeite kommt beim mir nix vernüftiges raus!

  • 124x112 ^^ custom size ;)

    Ich lad mal eben das hoch, was ich schon bereits gemacht hab:

    Edit:
    Ich hab jetzt einfach mal ne vereinfachte Version gemacht die geht...
    Aber die benutzt nicht eine naheliegende Farbe, sondern für den Hexcode des ASCII codes des Zeichens :lol:

    Einmal editiert, zuletzt von XxXFaNtA (1. Juli 2006 um 13:01)