GDI+ Image - pixelweises auslesen



  • Hallo zusammen,
    wie der Titel schon sagt, versuche ich von einem GDI+ Image Pixel für Pixel die Farbwerte auszulesen. Meine Google Suche hat mir zwar klar gemacht, dass das ganze nicht unüblich ist, die Lösung gefunden habe ich aber noch nicht (vll. hab ich auch einfach zu lange gesucht, um die guten Ergebnisse noch aufnehmen zu können 😞 )
    Mein Problem ist: Der Code den ich hatte, hat mit einer Bitmapklasse sehr gut funktioniert.

    Color pixelColor = dgm->GetPixel( dgm_x, dgm_y );
    

    Jetzt bin ich auf GDI-Plus umgestiegen und meine verzweifelten Versuche sind alle gescheitert (GetPixel verlang z.B. einen zusätzlichen Werte, etc)
    Ziel wäre es ein von einer Datei auf der Festplatte geladenes Bild (funktioniert) Pixelweise auf den R,G, oder B Wert zu überprüfen und diesen dann weiterverarbeiten zu können. Welche Funktionen bieten sich hier an bzw. wie ist das generelle Vorgehen?
    Danke im Vorraus für jedweden Lösungsversuch.
    Daniel

    P.S.: Ich geh die Ganze Sache gerade noch einmal von Null aus an. Außer meinem

    Image *dgm = new Image(buffer);
    

    habe ich also an Code gerade nicht zur Verfügung 😕

    P.P.S.:



  • FlashMuller schrieb:

    Color pixelColor = dgm->GetPixel( dgm_x, dgm_y );
    

    Das ist schon fast die Lösung (wenn dgm ein Bitmap* ist). Richtig ist

    Color pixelColor;
    dgm->GetPixel( dgm_x, dgm_y, &pixelColor );
    

    Ansonsten könnte auch die Methode Bitmap::LockBits() in Frage kommen, falls du Wert auf etwas mehr Performance legst.

    Falls du nur ein Image* hast, musst du es erst in ein Bitmap* casten:

    Image *dgmImage = new Image(buffer);
    if (dgmImage->GetType() == ImageTypeBitmap)
    {
        // dgmImage ist ein Bitmap
        Bitmap *dgm = (Bitmap*) dgmImage;
        ...
    }
    else
    {
        // Mist, dgmImage ist kein Bitmap...
    }
    


  • Hab ein problem was mich schon länger plagt und zwar will ich ein programm schreiben des mir den RGB wert eines pixel in dem Konsolenfenster aus gibt.
    😕
    Bin mal auf GetPixel gestoßen aber das hab ich nie zum laufen gebracht.
    😞
    Jetzt wollt ich fragen ob mir wer nen quellcode geben kann der genau das mach also den RGB wert ausgeben am besten würd ichs finden wen das noch erklärt wird damit ich das ganze kapiere. 👍

    PS: ich nutze den DEV-C++ wen das noch ne nötige info is THX schonmal im voraus



  • also mal meine Meinung dazu, solange man nur die farbe eines bestimmten Pixels wissen will, kann man mit GetPixel drauf los gehen, will man über ein ganzes bild damit gehen is das tötlich, weil dauert einfach zu lange, dann doch direkt mit den Bitmap-Daten arbeiten



  • Wollte das erstmal mit GetPixel machen weil ich das schon in anderen foren gelessen habe.

    Aber wen das mit den Bitmap-Dateien besser is würd ich auch gern das wissen aber das stell ich mir komplizierter vor.

    Da is das gut das ich lernfähig bin 😃

    Wen du das erklären könntest wäre echt nice.

    Wen das komplizierter is stell ich gern nen TS server dan können wir das besprechen.

    THX für die schnelle antwort



  • hier ist da ein denke ich gutes Beispiel was dein Problem lösen sollte denke ich mal ohne das ich jetzt hier alles erklären müsste

    http://www.codeguru.com/cpp/g-m/gdi/gdi/article.php/c3705/Image-Processing-using-GDI-and-VC-60.htm

    ich selbst hab da mir eine Klasse abgeleitet von CBitmap erstellt die Grafiken in graustufen wandeln kann oder Bilder flippen oder drehen kann und alles ohne GetPixel, da das halt viel zu langsam ist wie gesagt



  • Hmmmmm ok habs mir mal angekugt und auch durchgelessen hab nur ein problem bei ich bin nicht so der bringer in englisch. 😞

    Glaub das um einiges schwerer wie GetPixel.

    muss da erst langsam mit anfangen hab erst mit c++ angefangen so die grund sachen kenn ich einiger maßen aber halt nicht richtig da ich niemanden hatte der mir das gezeigt hat.

    Dan sind halt ein kolege und ich auf die idee gekommen ein programm zu schreiben was mir ein bixel in ner bilder folge findet und praktisch mit der maus zeigt wo der is.

    da sind wir dan auf GetPixel gestosen das hätte ich einfach zwischen 2 schleifen gesetzt.

    #include <iostream>
    #include <windows.h>
    #include <iomanip>
    
    using namespace std;
    
    int main()
    {
       POINT mPos;
       int x, y;
       int R, G, B; // hab ich jetzt mal nur reingemacht damits leuft xD
       {
       for(y=0; y<=600; y=y+1)
          {
          for(x=0; x<=800; x=x+1)
             {
             SetCursorPos (x, y);
             GetCursorPos(&mPos);
             cout << "X" << x << "Y" << y << endl;
             // hier möchte ich die ausgabe der RGB werte also in der art
             cout << "R" << R << "G" << G << "B" << B <<endl;
             system("CLS");
             }
          }
       }
    }
    

    Das mal das was wir soweit haben aber weiter kommen wir einfach nicht 😞
    und auf deutsch haben wir einfach kein Toturial gefunden 😞


Log in to reply