GUICtrlCreateIcon mit png-Datei

  • GUICtrlCreateIcon kann man auf eine ico- oder bmp-Datei anwenden.

    Was kann ich ein Icon mit einer png-Datei erzeugen?

    Recht vielen Dank schon einmal für eine Antwort.

  • Ich weiß nicht, wie du das meinst.

    Es geht mir darum, ein Control zu erzeugen, welches ein Handel zurückgibt, auf das ich mich später beziehen kann. Z.B. durch anklicken mit der Maus.

  • Ich glaube oh-ha meint damit, dass du aus der .png ein .ico machen sollst. Eigentlich willst du ja aber die .png so wie sie ist in einem Ctrl verwenden.

    Ich vermute, dass UEZ dafür eine Funktion hat (wahrscheinlich sogar 5 verschiedene für jeden nur erdenklicken Ctrltyp + GUIs). Habe auch etwas gegoogelt, aber nicht die richtige gefunden (nur eine die das komplette Fenster benutzt um eine .png anzuzeigen). Ich bin leider nicht fit mit Winapi & Sendmessage, sonst würde ich die 3 Zeilen selbst aufschreiben...

    lg

    M

  • Vielen Dank für eure Antworten!!!

    oh-ha

    IrfanView habe ich auch installiert und habe jetzt kapiert, wie du das meinst.

    Mir würde nur nicht gefallen, eine andere Software in mein Problem einzubinden. Würde wahrscheinlich auch verlangsamen.

    Aber wenn alles andere nicht geht, müsste ich das wohl so machen.

    Mars

    Es muss nicht sein, dass ich "die .png so wie sie ist", verwenden muss.

    Winapi ist leider auch nicht so mein Ding.

    Bitnugger

    Die Funktion _GuiCtrlSetImageEx ist mir beim Googeln auch schon über den Weg gelaufen. Blos in meinem Autoit3.3.8.1 gibt es sie nicht. Ich hatte früher auch schon Autoit3.3.12.0 installiert, musste das aber wieder verwerfen, weil dort der Befehl FileRead so verändert wurde, dass man beispielsweise eine Bitmap-Datei nicht mehr einlesen konnte - so wie sie ist. Sie wird in Hex-Zeichen umgewandelt. Aber von dem Ordner "C:\Program Files (x86)\AutoIt3" hatte ich mir damals einen Backup zurückbehalten. Aber _GuiCtrlSetImageEx ist dort auch nicht enthalten.

    Aber Dein Link zu _GuiCtrlSetImageEx hat mir insofern geholfen, als dort im Beispiel GuiCtrlSetImageEx.au3 die Funktion _GuiCtrlSetImageEx explizit ausgewiesen ist.

    Damit werde ich nun erst einmal weiterexperimentieren.

    Ich werde mich dann wieder zurückmelden.

    Nochmals vielen Dank euch allen.

    Gruß Dieter

  • Ich komme nicht weiter. Wen ich das Example unter

      _GuiCtrlSetImageEx

    abarbeiten möchte, kommt diese STDOUT:

    >"C:\Program Files (x86)\AutoIt3\SciTE\..\AutoIt3.exe" "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "D:\Programmdaten\Desktop\CreateIcon\Example.au3" /UserParams

    +>16:59:14 Starting AutoIt3Wrapper v.16.612.1119.0 SciTE v.3.6.6.0 Keyboard:00000407 OS:WIN_81/ CPU:X64 OS:X64 Environment(Language:0407) CodePage:0 utf8.auto.check:4

    +> SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE UserDir => C:\Users\ffff\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\ffff\AppData\Local\AutoIt v3\SciTE

    >Running AU3Check (3.3.10.2) from:C:\Program Files (x86)\AutoIt3 input:D:\Programmdaten\Desktop\CreateIcon\Example.au3

    ! Au3check doesn't support input files encoded as UTF8 with BOM: D:\Programmdaten\Desktop\CreateIcon\Example.au3

    D:\Programmdaten\Desktop\CreateIcon\Example.au3 - 1 error(s), 0 warning(s)

    !>16:59:14 AU3Check ended. Press F4 to jump to next error.rc:2

    +>16:59:14 AutoIt3Wrapper Finished.

    >Exit code: 2 Time: 0.5582

    Mit

    Au3check doesn't support input files encoded as UTF8 with BOM

    weiß ich nichts anzufangen.

  • History

    AutoIt:

    3.3.14.0 (10th July, 2015) (Release)

    Au3Check:

    • Fixed: False error report on COM variable.
    • Fixed: False error report on With statement.
    • Added: Support of UTF8 with BOM files.

    Fazit: Dein AutoIt (Au3Check) ist zu alt... also entweder eine aktuellere Version installieren, oder die Datei (das Example) als UTF-8 ohne BOM speichern.

    Siehe auch hier: BOM

  • musste das aber wieder verwerfen, weil dort der Befehl FileRead so verändert wurde, dass man beispielsweise eine Bitmap-Datei nicht mehr einlesen konnte - so wie sie ist. Sie wird in Hex-Zeichen umgewandelt.

    Wie sieht denn deiner Meinung nach eine (Bitmap)-Datei aus, so wie sie ist :?:

    Meinst du den Schwachsinn, den ein (zum Lesen von Text-Dateien gedachter) Editor ausspuckt, weil dieser krampfhaft versucht eine binäre Datei als Text zu interpretieren?

    Kannst du doch haben:

    Wenn du bestimmte Aufgaben mit FileRead vorhast, ist primär wichtig, die Datei im entsprechenden Modus zu öffnen! Dazu sollte man einfach mal einen Blick auf die Parameterbeschreibungen der Funktion werfen.

    Deine obige Aussage zu FileRead ist definitiv falsch.

  • Wie sieht denn deiner Meinung nach eine (Bitmap)-Datei aus, so wie sie ist :?:

    Jedes Zeichen ( 8 Bit) in der Datei sollte, wenn es eingelesen ist, auch wieder als ein Zeichen mit den gleichen Bits erscheinen.

    Beispielsweise soll also des Zeichen 10001111 hexadezimal als 0x8F erscheinen und nicht (wie bei Autoit3.3.12.0) als zwei Zeichen 0x3846 ("8F").

    Ich werde als nächstes das neuste Autoit installieren und dann weitersehen.

    Im Sommer arbeite ich viel im Garten, deshalb entschuldgt bitte, wenn meine Reaktionrn nur zögerlich erfolgen.

    Ich melde mich wieder.

    Dank und Gruß an euch alle

    Dieter

  • Ich habe jetzt die neuste Version von Autoit installiert.

    Nun habe ich wieder das gleiche Problem: Wie kann ich eine Bitmap-Datei einlesen?

    Ich habe beispielsweise die Datei

    rot.bmp

    und möchte sie mit dem Programm

    Test.au3

    einlesen. Die Datei besitzt eine Länge von 306 Bytes und genau dies 306 Bytes will ich so einlesen. Eingelesen werden aber 614 Zeichen. Jedes Byte wird nämlich in Form von zwei Hexadezimal-Ziffern ins Textformat konvertiert.

    Was kann ich tun?

    Wie bereits gesagt, klappte das unter Autoit 3.3.8.1 noch einwandfrei. Wen es interessiert: ich habe noch einen Backup der Setup-Datei von Autoit 3.3.8.1 und kann diesen zur Verfügung stellen.

  • Es macht auch gar keinen Sinn, eine Datei mit binären Daten in einem Texteditor anzeigen zu lassen.

    Im besten Fall versucht der Editor die Daten irgendwie als Zeichen darzustellen. Im schlechtesten Fall bricht er die Darstellung beim Nullbyte ab.

    Also wenn eine Darstellung, dann in einem Programm, dass die Daten als Bytefolge darstellen kann, meist im Hexadezimalformat (z.B. HxD "https://mh-nexus.de/de/"). Man kann aber auch AutoIt dafür verwenden:

  • Hallo Oscar,

    vielen Dank dafür, dass du dir so viel Mühe mit mir gibst.

    Ich habe jedoch Schwierigkeiten dein Beispiel zu verstehen.

    Ich kenne mich leider mit Strukturen und DLL-Aufrufen nicht aus.

    Deshal habe ich die Information nicht gefunden, wie die im Feld "ASCII Chars" stehenden Zeichen ermittelt wurden.

    In deinem Beispiel hattest du di Funktion BinaryLen verwendet. Das hat mich auf die Idee gebracht nach weiteren Binary-Funktionen zu suchen und ich habe die Funktion BinaryToString gefunden, die meine Wünsche erfüllt . Sie ist auch sehr schell und benötigt z. B für einen 1920 X 1080 - Screenschot nur 12 Millisekunden. Ich werde sie in meine Bitmap-Programme nach dem FileRead einfügen und dann wird alles wieder funktionieren.

    Übrignes hatte Andy unter

    DOheim
    22. Januar 2016 um 18:18

    im Beitrag #8

    im Jahre 2016 ein Programm eingestellt, das sich mit der Auswertung einer Bitmap-Datei unter den bedingungen von Autoit 3.3.8.1 befasste. Wie ich festelle hat er das - ebenfalls unter Verwendung von Strukture - inzwischen auf die neuen Autoit-Versionen angepasst. Es stellt nun wieder fest, dass die Datei rot.bmp aus 81 Rot-Pixeln besteht.

    Nochmasl recht vielen Dank

    Gruß

    Dieter

  • Jedes Pixel eines Bildes besteht ja aus den drei Farben blau, grün und rot. In der Bitmapdatei wird entsprechend jedes Pixel durch drei Bytes beschrieben, welche die Werte 0 bis 255 annehmen können. Und diese Werte benötige ich, wenn ich Pixel bearbeiten möchte.

    Beispiel:

    Die Datei

    rot1.bmp

    soll mit demProgramm

    Test.au3

    bearbeitet werden.

    Die Bitmapdatei rot1.bmp sieht 8-fach gezoomt so aus:

    Jede Bitmap-Datei hat am Anfang einen 54 Bytes langen Header:

    Danach folgen je drei Byte für jedes Pixel (blau grün rot). Das erste Pixel ist das in der linken unteren Ecke.

    Das Programm Test.au3 ersetzt das 5. Pixel durch die Farbe weiß und gibt die veränderte Datei als rot2.bmp aus.

    Die Bitmapdatei rot2.bmp sieht 8-fach gezoomt so aus:

    Sollen in einer großen Bitmap-Datei viele Pixel bearbeitet werden, dann muss man dazu Assembler-Befehle verwenden. Sonst dauert es ewig.

    Ich hoffe, dass ich deine Frage richtig interpretiert habe.

  • Ich habe Dir mal ein Script geschrieben, wie ich das angehen würde:

  • Du könntest ja auch, wie wohl dein voriges Programm arbeitete, die Datei in einzelnen Bytes einlesen. Das ganze in einem 1-basiertem Array und du kannst zielgenau zugreifen.

    Spoiler anzeigen

    Wobei ich ein Arbeiten mit FileSetPos / Read / Write / Flush bevorzugen würde, da dann in einem Aufwasch gelesen und geschrieben werden kann.