Grafik in If-Verzweigung

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Also, ich habe vor, dass ein Programm ein Bild erkennt. Und den dementsprechenden Befehl halt ausführt... Tut mir leid, wenn ich unverständlich bin :D

    Ich meine es so, dass ein Randombild erstellt wird, mein Programm dann per Rechstklick --> Grafik kopieren --> Zwishcnespeicher dieses Bild erkennt, solange es in einer Liste aufgelistet ist und dann die dem entsprechende Funktion ausgeführt wird... :D
  • Checkmateing schrieb:

    Das muss schon mit einem Vergleich und nicht mit einer Zuweisung geschehen.
    = : Zuweisung
    == : Vergleich

    MfG
    Check
    ups :S ich meine == :whistling: Falls Zwischenspeicher gleich Bild1 ist...


    Zur Anwendung, ich will das nur zur Übung wissen und dementsprechendes Programm schreiben, da ich inzwischen schon so ziemlich alle Anfängerprogramme gemacht habe (Taschenrechner, Terminkalender, Spambot und noch andere nützliche Dinge). Jetzt ist mir die Idee gekommen eine Art Smileyverzeichnis zu machen... Ich weiß, sinnlos, aber ich wills zur Übung :D
    Und das würde ich halt so umsetzen, da in allen Foren die Smileys gelinkte Bilder sind, dass ich das Bild in den Zwischenspeicher (heißt das so?) kopiere und dann das Programm starte, und es mir den Code :) D, : ) .....) ausgibt...

    Habe mich mal durchgelesen und irgendwas von Clipboard gelesen, aber das nur im Zusammenhang zu Strings. Und ich nehme an, dass sich Bilder nicht in eine Zeichenkette "schreiben" lassen. Auser natürlich die Linkadresse, aber das will ich nich ;)

    Die Ausgabe des Codes soll erstmal nur in der Konsole, oder in einer Messagebox (ja, weiß wies geht :D) ausgegeben werden.


    Ich hoffe ich habs diesmal deutlicher und klarer ausgedrückt, falls nicht.... ja :D probier ichs nochmal ;)

    Muss ich dann jede einzelne Smileygrafik in die Datei einbinden?
    Ich verlang jetzt auch keinen gesamten Code, sondern nur so einen Ansatz, Stichwort, Tut. oder so... ;)


    Danke :thumbsup:
    (Falls das für mein sehr kleines C++ Wissen noch zu hoch ist, dann sagt es und ich bin ruhig ^^ )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von JaffaCoder ()

  • Viel Spaß bei dem Bau dieser Bilderanalyse!
    Da helfe ich nicht mehr, da bin ich nicht so gut drin, aber grundsätzlich einfach das Bild aus dem Zwischenspeicher holen und in eine Variable tun.
    Diese variable mit einer aus deiner Bilder-Sammlung vergleichen und nicht zuweisen, dann jeweils unter den jeweiligen Bedingungen ausgeben lassen.
    Trotz allem, was willst du da vergleichen? Wie oben in diesem Beitrag genannt, nix vergleichen, Bilder Analyse. Nicht jedes Forum hat die gleichen Smileys und die Hintergründe sind teilweise auch anders. Trotz allem, bleibst du im gleichen Forum usw. ist das simple Vergleichen schon okay.

    MfG
    Check
  • Das Stichwort Clipboard ist Richtig um an die Zwischenablage ran zu kommen, in diesem werden nicht nur Strings gespeichert auch Binärdaten wie BIlder können darin gespeichert sein.

    Wenn du wirklich in Richtung Bilderkennung gehen möchtest kannst du unter dem Stichwort OCR weitersuchen. Solche Sachen werden auch oft mit trainierten neuronalen Netzen durchgeführt.

    Wenn du Übung suchst, dann würde ich dir empfehlen lieber ein "Malprogramm" ala Paint zu programmieren, in der du auch mal genauer auf die schlichte Bitmap Struktur, oder auch andere Format, eingehen kannst.
    -> speicher, laden, verarbeiten

    Mfg Rushh0ur
  • Rushh0ur schrieb:

    Wenn du wirklich in Richtung Bilderkennung gehen möchtest kannst du unter dem Stichwort OCR weitersuchen. Solche Sachen werden auch oft mit trainierten neuronalen Netzen durchgeführt.

    Wenn du Übung suchst, dann würde ich dir empfehlen lieber ein "Malprogramm" ala Paint zu programmieren, in der du auch mal genauer auf die schlichte Bitmap Struktur, oder auch andere Format, eingehen kannst.
    -> speicher, laden, verarbeiten

    Mfg Rushh0ur
    Ich glaub das ist mir alles noch etwas zu hoch :D In der Konsole lässt sich ein Malprogramm schlecht machen und mit der Fensterprogrammierung bin ich erst bei den Messageboxen und einfachen Text in einem normalen Fenster anzeigen lassen...

    Zu OCR. Das ist ja wirklich Erkennungssoftware, das praktisch Gemeinsamkeiten heraussucht (wenn ich das richtig verstanden habe)... Aber ich bräuchte ja etwas, dass nur prüft, ob die Bilde identisch sind...

    Hast du ne Idee, wo ich mehr zum Clipboard finde? In der MSDN wurde ich nicht wirklich fündig und sonsitges Google hat ergeben, dasas auf jeder Seite, was anderes stand...

    Danke :D
  • Schau mal hier: Clipboard Functions

    Beispiel für Text:

    Quellcode

    1. std::string fromClipboard;
    2. if ( OpenClipboard(0) )
    3. {
    4. HANDLE hData = GetClipboardData( CF_TEXT );
    5. if (hData)
    6. {
    7. char * buffer = (char*)GlobalLock( hData );
    8. fromClipboard = buffer;
    9. GlobalUnlock( hData );
    10. }
    11. CloseClipboard();
    12. }
    13. printf("%s\n", fromClipboard.c_str());
    Alles anzeigen


    Die Daten eines Bitmap kriegt man mittels GetClipboardData(CF_BITMAP) auch ziemlich einfach, vorrausgesetzt es wurde auch ein Bitmap (Bild != Bitmap) in der Zwischenlage abgelegt.

    Mfg Rushh0ur
  • Rushh0ur schrieb:

    Schau mal hier: Clipboard Functions

    Beispiel für Text:

    Quellcode

    1. std::string fromClipboard;
    2. if ( OpenClipboard(0) )
    3. {
    4. HANDLE hData = GetClipboardData( CF_TEXT );
    5. if (hData)
    6. {
    7. char * buffer = (char*)GlobalLock( hData );
    8. fromClipboard = buffer;
    9. GlobalUnlock( hData );
    10. }
    11. CloseClipboard();
    12. }
    13. printf("%s\n", fromClipboard.c_str());
    Alles anzeigen


    Die Daten eines Bitmap kriegt man mittels GetClipboardData(CF_BITMAP) auch ziemlich einfach, vorrausgesetzt es wurde auch ein Bitmap (Bild != Bitmap) in der Zwischenlage abgelegt.

    Mfg Rushh0ur
    [IMG:http://www.kiwufo.de/images/smilies/anbet.gif]
    Danke, du bist ein Genie :thumbup:
  • Wenn du mit Bitmaps (*.bmp) arbeitest dann soltest du dir auch die Struktur von Bitmaps und die WinAPI Funktionen dazu anschauen.

    Hier ein Beispiel zum Clipboard:

    Quellcode

    1. HANDLE hData = GetClipboardData( CF_BITMAP );
    2. if (hData)
    3. {
    4. HBITMAP hBmp = 0;
    5. BITMAPINFO bmpinfo = {0};
    6. HDC hdcBmp = 0;
    7. char *pxBuffer = 0;
    8. // Handle in Bitmap Handle zu einfacheren Handhabung casten
    9. hBmp = (HBITMAP)hData;
    10. // Zeichenfläche (Context) erstellen und mit Bild verknüpfen
    11. hdcBmp = CreateCompatibleDC(0);
    12. SelectObject(hdcBmp, hBmp);
    13. // Bitmap Informationen auslesen
    14. bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    15. GetDIBits(hdcBmp, hBmp, 0, 0, NULL, &bmpinfo, 0);
    16. // Pixelbuffer erstellen und auslessen
    17. pxBuffer = new char[ bmpinfo.bmiHeader.biHeight * bmpinfo.bmiHeader.biWidth * (bmpinfo.bmiHeader.biBitCount/8) ];
    18. bmpinfo.bmiHeader.biCompression = BI_RGB;
    19. GetDIBits(hdcBmp, hBmp, 0, bmpinfo.bmiHeader.biHeight, pxBuffer, &bmpinfo, DIB_RGB_COLORS);
    20. // mach was mit dem Pixelbuffer (pxBuffer)
    21. // zb. mittels memcmp() mit einem anderen Pixelbuffer vergleichen
    22. delete pxBuffer;
    23. // Zeichenfläche freigeben
    24. DeleteDC(hdcBmp);
    25. // Infos Ausgeben
    26. printf("Bitmap in der Zwischenablage gefunden!\n\n");
    27. printf("Breite: %d\n", bmpinfo.bmiHeader.biWidth);
    28. printf("Hoche: %d\n", bmpinfo.bmiHeader.biHeight);
    29. printf("Bittiefe:%d\n", bmpinfo.bmiHeader.biBitCount);
    30. printf("Groesse: %d\n", bmpinfo.bmiHeader.biSizeImage);
    31. }
    32. else
    33. printf("Kein Bild in der Zwischenablage\n");
    Alles anzeigen


    Mfg Rushh0ur
  • Rushh0ur schrieb:

    Wenn du mit Bitmaps (*.bmp) arbeitest dann soltest du dir auch die Struktur von Bitmaps und die WinAPI Funktionen dazu anschauen.

    Hier ein Beispiel zum Clipboard:

    Quellcode

    1. HANDLE hData = GetClipboardData( CF_BITMAP );
    2. if (hData)
    3. {
    4. HBITMAP hBmp = 0;
    5. BITMAPINFO bmpinfo = {0};
    6. HDC hdcBmp = 0;
    7. char *pxBuffer = 0;
    8. // Handle in Bitmap Handle zu einfacheren Handhabung casten
    9. hBmp = (HBITMAP)hData;
    10. // Zeichenfläche (Context) erstellen und mit Bild verknüpfen
    11. hdcBmp = CreateCompatibleDC(0);
    12. SelectObject(hdcBmp, hBmp);
    13. // Bitmap Informationen auslesen
    14. bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    15. GetDIBits(hdcBmp, hBmp, 0, 0, NULL, &bmpinfo, 0);
    16. // Pixelbuffer erstellen und auslessen
    17. pxBuffer = new char[ bmpinfo.bmiHeader.biHeight * bmpinfo.bmiHeader.biWidth * (bmpinfo.bmiHeader.biBitCount/8) ];
    18. bmpinfo.bmiHeader.biCompression = BI_RGB;
    19. GetDIBits(hdcBmp, hBmp, 0, bmpinfo.bmiHeader.biHeight, pxBuffer, &bmpinfo, DIB_RGB_COLORS);
    20. // mach was mit dem Pixelbuffer (pxBuffer)
    21. // zb. mittels memcmp() mit einem anderen Pixelbuffer vergleichen
    22. delete pxBuffer;
    23. // Zeichenfläche freigeben
    24. DeleteDC(hdcBmp);
    25. // Infos Ausgeben
    26. printf("Bitmap in der Zwischenablage gefunden!\n\n");
    27. printf("Breite: %d\n", bmpinfo.bmiHeader.biWidth);
    28. printf("Hoche: %d\n", bmpinfo.bmiHeader.biHeight);
    29. printf("Bittiefe:%d\n", bmpinfo.bmiHeader.biBitCount);
    30. printf("Groesse: %d\n", bmpinfo.bmiHeader.biSizeImage);
    31. }
    32. else
    33. printf("Kein Bild in der Zwischenablage\n");
    Alles anzeigen


    Mfg Rushh0ur


    Oh mein Gott :wacko:

    Das sieht etwas schwer aus... Ich warte lieber bis zu den Sommerferien, da hab ich mehr Zeit mir alles genau anzuschauen.

    Trotzdem danke :thumbsup: