Paintbox auslesen
-
Hallo liebe C++ Community,
ich bin Neueinsteiger im C++ und mache gerade meine ersten Gehversuche mit dem Borland C++ Builder 6.
Ich habe eine Paintbox (300x300) erstellt, in welche ich durch klicken verschiedene Farben eintragen kann (Feldgröße 10x10). Somit ensteht eine Box mit 30x30 Quadraten. Von dieser möchte ich nun per Knopfdruck den Farbzustand auslesen und in eine Matrix (boolsch) übertragen, sprich nur 0 oder 1 für die eine oder die andere Farbe.
Wie kann man denn sowas anstellen? Ich bin ein wenig ratlos, da Forum, Internet und Literaturrecherche mich noch nicht so recht weiter brachte.
Vielen Dank fürs Lesen ersteinmal!Grüße
Der Herr

-
Ein Admin hätte dich auch sicher verschoben. Ein Doppelpost ist keine gute Idee, da die Wahrscheinlichkeit hoch ist, dass den Helfern oder dir etwas entgeht.
-
Hallo
Mit dem Array Canvas::Pixels kannst du den Farbwert eines bestimmten Pixels als TColor auslesen. Diesen kannst du dann als 32-bit Zahl weiter verarbeiten.
bis bald
akari
-
Mmh ich hab schon eine grobe Vorstellung dazu wie es aussehen könnte, aber leider fehlt mir die Syntax.
Ich müsste meine PaintBox mit zwei ineinander gelegten for Schleifen von 0-300 in Zehnerschritten durchlaufen (1 Feld = 10x10 Pixel) und nachschauen:
if (feld==rot) Matrix an der Stelle =1
else (feld==grün) Matrix an der Stelle =0kann man das irgendwie umsetzen?
-
Hallo
for (int x = 0; x < 30; ++x) for (int y = 0; y < 30; ++y) { if (Canvas->Pixels[x*10][y*10] == clRed) Matrix[x][y] = 1; if (Canvas->Pixels[x*10][y*10] == clGreen) Matrix[x][y] = 0; }Damit filterst du allerdings nach der konkreten RGB-Farbe. Wenn du nur einen nach einem Grenzwert des Rot- bzw. Grünanteils suchen willst, must du mit dem Makro RGB den Farbanteil noch abspalten.
bis bald
akari
-
Das war genau das was ich gesucht habe. Leider erhalte ich genau in dieser Programmzeile folgenden Fehler:
"Project raised exception class EAccessViolation with message 'Access violation at address 400B74B0 in module 'vlc60.bpl' Read of address '00000008'."Habe ich vergessen was zu deklarieren? Ansonsten sind keine Fehler, Meldungen oder Warnungen aufgetreten. Bin schrittweise durch das Programm gegangen und in der Zeile
if (Form1->PaintBox1->Canvas->Pixels[x*10][y*10] == clRed) matrix[x][y] = 0;tritt der Fehler auf.
-
Hallo
Vermutlich überschreiten die Indexe x und/oder y irgendwann die zulässigen Dimensionen von Pixels und/oder Matrix. Da alles, was wir hier haben, ein von mir ausgedachtes unvollständiges Codefragment ist, können wir dazu nichts konkreters sagen. Benutz den Debugger um den Auslöser des Fehlers zu finden.
bis bald
akari
-
bool now[H][W], next[H][W]; calculate(now,next);Hier springt er dann in die Funktion:
void calculate(bool mata[][W], bool matb[][W]) { //Auslesen der aktuellen Farbe jedes Quadrates der Paintbox und übertragen in Matrix for (int x = 0; x < 30; ++x) for (int y = 0; y < 30; ++y) { if (Form1->PaintBox1->Canvas->Pixels[x*10][y*10] == clRed) mata[x][y] = 0; if (Form1->PaintBox1->Canvas->Pixels[x*10][y*10] == clLime) mata[x][y] = 1; }Der Fehler ensteht direkt beim reinspringen in die Funktion. Der Debugger hat mir leider auch nicht weiter geholfen.
Die Paintbox besteht aus 300x300 Pixeln, welche in 30x30 Felder unterteilt sind. Ich weis nur nicht wo diese Dimensionen überschritten werden sollen?!