We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Hi there, I'm working on my project to draw a line based on color detecting.
what I want to do is drawing color lines when I click the color I want to track on. But when I try it, the first line's starting point is always located in the left corner. I want to make a line start from clicking points.
I think I have to correct xPrev and yPrev. But.. I don't know how to correct them.
Here is my code.
import processing.video.*;
Capture video;
PGraphics topLayer;
color trackColor;
int xprev=mouseX,yprev=mouseY;// why?
void setup() {
size(640, 480);
smooth();
video = new Capture(this, width, height);
video.start();
trackColor = color(0, 255, 0);
topLayer = createGraphics(width, height, g.getClass().getName());
}
void draw() {
frameRate(3000);
if (video.available()) {
video.read();
}
video.loadPixels();
image(video, 0, 0);
float worldRecord = 500;
int closestX = 0;
int closestY = 0;
for (int x = 0; x < video.width; x ++ ) {
for (int y = 0; y < video.height; y ++ ) {
int loc = x + y*video.width;
color currentColor = video.pixels[loc];
float r1 = red(currentColor);
float g1 = green(currentColor);
float b1 = blue(currentColor);
float r2 = red(trackColor);
float g2 = green(trackColor);
float b2 = blue(trackColor);
float d = dist(r1, g1, b1, r2, g2, b2);
if (d < worldRecord) {
worldRecord = d;
closestX = x;
closestY = y;
}
}
}
topLayer.beginDraw();
fill(trackColor);
topLayer.stroke(trackColor);
if (worldRecord < 10) {
topLayer.strokeWeight(3);
topLayer.line(xprev,yprev,closestX,closestY);
xprev = closestX;
yprev = closestY;
}
topLayer.endDraw();
image(topLayer,0,0);
}
void mousePressed() {
int loc = mouseX + mouseY*video.width;
trackColor = video.pixels[loc];
}
Answers
here is an working example.
MouseX and MouseY will always be 0 before setup() because they are not set yet.
by giving xprev=-1, yprev=-1 values outside the range that the mouse can have, we can later check if we are at the beginning and then skip the first line from -1,-1
see also
https://www.processing.org/reference/pmouseX.html
Chrisir
thank you Chrisir! it works well :)