Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,80 @@
|
|||
import java.awt.Point;
|
||||
import java.util.Queue;
|
||||
import java.util.LinkedList;
|
||||
|
||||
PImage img;
|
||||
int tolerance;
|
||||
color fill_color;
|
||||
boolean allowed;
|
||||
|
||||
void setup() {
|
||||
size(600, 400);
|
||||
img = loadImage("image.png");
|
||||
fill_color = color(250, 0, 0);
|
||||
fill(0, 0, 100);
|
||||
tolerance = 15;
|
||||
image(img, 0, 0, width, height);
|
||||
textSize(18);
|
||||
text("Tolerance = "+tolerance+" (Use mouse wheel to change)", 100, height-30);
|
||||
text("Right click to reset", 100, height-10);
|
||||
}
|
||||
|
||||
void draw() {
|
||||
if (allowed) {
|
||||
image(img, 0, 0, width, height);
|
||||
text("Tolerance = "+tolerance+" (Use mouse wheel to change)", 100, height-30);
|
||||
text("Right click to reset", 100, height-10);
|
||||
allowed = false;
|
||||
}
|
||||
}
|
||||
|
||||
void mousePressed() {
|
||||
if (mouseButton == RIGHT) {
|
||||
img = loadImage("image.png");
|
||||
} else {
|
||||
img.loadPixels();
|
||||
flood(mouseX, mouseY);
|
||||
img.updatePixels();
|
||||
allowed = true;
|
||||
}
|
||||
}
|
||||
|
||||
void mouseWheel(MouseEvent event) {
|
||||
float e = event.getCount();
|
||||
tolerance += 2*e;
|
||||
if (tolerance > 128) tolerance = 128;
|
||||
if (tolerance < 0) tolerance = 0;
|
||||
allowed = true;
|
||||
}
|
||||
|
||||
void flood(int x, int y) {
|
||||
color target_color = img.pixels[pixel_position(mouseX, mouseY)];
|
||||
if (target_color != fill_color) {
|
||||
Queue<Point> queue = new LinkedList<Point>();
|
||||
queue.add(new Point(x, y));
|
||||
while (!queue.isEmpty()) {
|
||||
Point p = queue.remove();
|
||||
if (check(p.x, p.y, target_color)) {
|
||||
queue.add(new Point(p.x, p.y-1));
|
||||
queue.add(new Point(p.x, p.y+1));
|
||||
queue.add(new Point(p.x-1, p.y));
|
||||
queue.add(new Point(p.x+1, p.y));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int pixel_position(int x, int y) {
|
||||
return x + (y * img.width);
|
||||
}
|
||||
|
||||
boolean check(int x, int y, color target_color) {
|
||||
if (x < 0 || y < 0 || y >= img.height || x >= img.width) return false;
|
||||
int pp = img.pixels[pixel_position(x, y)];
|
||||
boolean test_tolerance = (abs(green(target_color)-green(pp)) < tolerance
|
||||
&& abs( red(target_color)- red(pp)) < tolerance
|
||||
&& abs( blue(target_color)- blue(pp)) < tolerance);
|
||||
if (!test_tolerance) return false;
|
||||
img.pixels[pixel_position(x, y)] = fill_color;
|
||||
return true;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue