BCB5:In einem Bild Teile anhand einer Farbe erkennen und Position auf dem Bild bestimmen ?
-
Hallo zusammen,
ich würde gerne in einem Bild mit farblich unterschiedlichen Bauteilen durch klicken auf die Bauteile die Farbe bzw Farbwerte übergeben bekommen und die Position, wo die Maus in dem Bild ist...
Frage: Wie geht das ?
Benutze den Borland Builder 5.0 Enterprise Edition
Danke im voraus !!!
Schöne Feiertage Euch allen
-
So schwer is das nicht. Also erstmal musst du dir mal das OnMouseDown Ereignis von TImage angucken. Da gibts X unt Y als übergabeparameter. Das sieht ja fast wie die X/Y Position der Maus aus ;).
Sie ist es auch (sogar schon relativ auf das Objekt bezogen).
Also:void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { gesuchter_wert = Image1->Canvas->Pixels [X][Y]; } //---------------------------------------------------------------------------
ganz einfach.
-
Werd das mal versuchen, bin da in letzter Zeit etwas eingerostet... Muß mich da erstmal wieder reinwuseln...
DANKE und schöne Festtage
-
Ich bräuchte da nochmal etwas Nachhilfe...
Also das mit den Koordinaten auslesen klappt schon ganz toll, aber wie kann ich denn die Farbwerte auswerten ? So wie im Micrografix Picture-Publisher z.b. wo die 3 Warbwerte aus RGB ausgegeben werden...
Weiß jemand wie das geht ? weil wenn ich den Wert z.B. in ein Label einschreiben lasse, gibt der mir nur eine lange Zahl, die schon beim daneben klicken einen leicht anderen Wert hat, obwohl, wenn ich das mit dem Publisher im Bild messe, alle 3 Farbkomponenten gleich geblieben sind...
Kann mir da noch mal jemand helfen ???
DANKE im voraus
-
csonline schrieb:
<Fullquote gelöscht>
Sieh mal in der Borland Hilfe unter TColor nach. In den Datentyp sind nämlich die RGB Werte vorhanden.
Ein Bsp (ohne Gewähr):
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { #pragma pack(1) struct TRGB { BYTE system; BYTE Rot; BYTE Gruen; BYTE Blau }; #pragma pack() TColor c = Image1->Canvas->Pixels [X][Y]; TRGB *RGB =(TRGB*)&c; String s = "Rot: "+IntToStr(RGB->Rot)+ "; Grün:"+IntToStr(RGB->Gruen)+ "; Blau:"+IntToStr(RGB->Blau); Caption = s; } //---------------------------------------------------------------------------
Gruß Burkhard
Edit:
Zitate bitte auf das Notwendigste beschränken. Danke!