Farbe eines Pixels in einer TImage ändern



  • Hallo,
    Nutze ein TImage als (Multi)Button. Je nach Vorgabe werden unterschiedliche Grafiken angezeigt. Zu Zeit lade ich dies aus entsprechende Dateien. Da dies mehrere Dateien voraussetzt, möchte ich das die entsprechende Pixels im Programmcode farblich nach Vorgabe geändert werden. Die Grafikdateien sind *.ico . Wenn ich richtig informiert bin, ist der Hintergrund transparent. Ich stelle mir vor, das ich Pixel X nach seiner Farbe abfrage und dann ändern oder nicht. Eine zusätzliche Maske-Datei möchte ich nicht.
    Suche also Link's bzw. wer kann mir Hilfe leisten?
    Gruß Siegfried



  • Hallo

    😕
    Wenn du eine Farbe als Transparent markeiren willst, dann benutzt die gleichlautennden Eigenschaften.

    Wenn du generell eine Farbfläche von eine farbe in eine andere umwandeln willst, gibt es TCanvas::FloodFill.

    Ansonsten eben auf die einzelnen Pixel zugreifen und ändern.

    bis bald
    akari



  • Hallo,
    hast du ein Beispiel für diesen Befehl " TCanvas::FloodFill ". Muß doch die alte und die neue Farbe angeben.
    Gruß Siegfried

    [Edit]

    Muß dann sehen, wie ich die alte Farbe ( betr. Orginal-Datei ) herausfinde, um dieses zu übergeben.
    Gruß Siegfried 😉



  • Hallo

    schau in die BCB-Hilfe zu TCanvas::FloodFill.

    Die Methode ist äquivalent zu z.B. der Funktion Farbfüller aus MS Paint.

    bis bald
    akari



  • Hallo,
    Mit FloodFill kein Erfolg und unzureichende Hilfe in der BCB.
    Habe folgendes in einer Test-Form gemacht.

    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    Graphics::TBitmap *Bitmap;
    TRect   MyRect;
    MyRect = Rect(0,0,32,32);
    Form1->Canvas->Brush->Color = clRed;
    Bitmap = new Graphics::TBitmap;
    Bitmap->LoadFromFile("ImageIcon\\platzieren32.bmp");
    Form1->Canvas->BrushCopy(MyRect, Bitmap, MyRect, clBlack);
    delete Bitmap;
    }
    

    dies funktioniert.
    wenn ich in meinem Projekt folgendes mache

    TRect   MyRect;
    MyRect = Rect(0,0,iPixels,iPixels);
    NewImage[iSender]->Canvas->Brush->Color = clRed;
    NewImage[iSender]->Canvas->BrushCopy(MyRect, NewImage[iSender]->Picture->Bitmap, MyRect, clBlack);
    

    Wechselt die Austauschfarbe nur in weis.
    wo ist hier der Fehler ?
    Gruß Siegfried 😞



  • Hallo
    Vielleicht kann dir das weiter helfen

    Pixels in Verbindung mit einer Schleife.
    Und abfragen geht auch mit Pixels

    Image1->Canvas->Pixels[1][2]=clRed;
    


  • Hallo,
    Danke für dein Beispiel. Dies habe ich in meinem Projekt übernommen.
    Möchte auf meine Beitrag " nicht alle Farben funktionieren " verweisen.
    Hier habe ich ein großes Problem. Habe inzwischen den Farbwert Orange den Wert 0x004080FF übergeben.
    Weis nicht, wo der Fehler ist.
    Gruß Siegfried 😞



  • for (int i=0; i<Image->Width; i++)
        if (Image1->Canvas->Pixels[i][2]=clRed)
           Image1->Canvas->Pixels[i][2]=TColor(0x004080FF);
    

    geht aber nur bei Bitmap.
    entweder du zeichnest dein Icon in die Image als BitMap oder
    läst es gleich als solches rein.


Anmelden zum Antworten