Создайте функцию, которая рисует одну точку на PGraphics
объекте:
void DrawPen(PGraphics pg, int cptX, int cptY, int r) {
pg.beginDraw();
for (int x = 0; x < r; ++x) {
for (int y = 0; y < r; ++y) {
float distance = sqrt(x*x + y*y);
float alpha = 255-map(distance,0,r,0,255);
if (distance < r) {
pg.set(cptX+x,cptY+y,color(255,255,255, alpha));
pg.set(cptX-x,cptY+y,color(255,255,255, alpha));
pg.set(cptX+x,cptY-y,color(255,255,255, alpha));
pg.set(cptX-x,cptY-y,color(255,255,255, alpha));
}
}
}
pg.endDraw();
}
Нарисуйте точку на отдельном PGraphics
объекте в setup
PGraphics pg;
PGraphics pg_pen;
int rad = 20;
void setup (){
size(800, 800, P2D);
pg = createGraphics(800, 800, JAVA2D);
pg.beginDraw();
// [...]
pg.endDraw();
pg_pen = createGraphics(2*rad, 2*rad, JAVA2D);
DrawPen(pg_pen, rad, rad, rad);
}
Когда мышь перетаскивают, смешайте pg_pen
с общим PGraphics
объектом (pg
) в текущей позиции мыши:
void mouseDragged(){
pg.beginDraw();
pg.image(pg_pen, mouseX-rad, mouseY-rad);
pg.endDraw();
}
Для поиска полноты функция draw
:
void draw () {
background(0);
image(pg,0,0);
}
[...] и попытался получить цвет из белой части для рисования на черной части.
Добавьте параметр color
к функции DrawPen
и очистите перо PGraphics
, прежде чем рисовать на нем:
void DrawPen(PGraphics pg, int cptX, int cptY, int r, color c) {
pg.beginDraw();
pg.clear();
for (int x = 0; x < r; ++x) {
for (int y = 0; y < r; ++y) {
float distance = sqrt(x*x + y*y);
float alpha = 255-map(distance,0,r,0,255);
if (distance < r) {
color pc = color(red(c),green(c),blue(c), alpha);
pg.set(cptX+x,cptY+y,pc);
pg.set(cptX-x,cptY+y,pc);
pg.set(cptX+x,cptY-y,pc);
pg.set(cptX-x,cptY-y,pc);
}
}
}
pg.endDraw();
}
Получить цвет при нажатии мышиперезвоните событие и измените цвет пера:
void mousePressed() {
color c = pg.get(mouseX, mouseY);
println(c);
DrawPen(pg_pen, rad, rad, rad, c);
}
Обратите внимание, что цвет получается от объекта pg
, а не отэкран. Если вы хотите получить цвет с экрана, тогда оно должно быть (без .pg
):
color c = get(mouseX, mouseY);
Далее цвет меняется в любое время, когда нажата какая-либо мышь (нажата не перетаскивается). Возможно, вы хотите изменить цвет при нажатии правой кнопки мыши и рисовать при нажатии левой кнопки мыши:
void mousePressed() {
if (mouseButton == RIGHT) {
color c = pg.get(mouseX, mouseY);
println(c);
DrawPen(pg_pen, rad, rad, rad, c);
}
}