Обработка кода - сенсорный экран ластика - PullRequest
1 голос
/ 08 марта 2019

Меня направили на этот форум, когда я попросил своего лектора дать совет по коду кода для группового проекта. Общая идея состоит в том, что есть два изображения друг над другом, пользователь может стереть верхнее изображение, чтобы показать одно под ним.

Используя некоторые другие проекты с этого форума, мне удалось запустить основы, однако я изо всех сил пытаюсь получить код к начальной точке, как только пользователь отпустит мышь.

Буду также признателен за любые советы относительно того, как преобразовать это в использование сенсорного экрана. Я посмотрел на мультитач-код в приложении обработки, однако он не позволяет мне добавлять изображения к нему, и если я пытаюсь использовать компьютерное программное обеспечение, мне не кажется, что мультитач. Есть ли способ обойти это?

Код, который у меня сейчас есть, будет ниже, я буду признателен за любые советы или предложения - заранее спасибо!

PImage img, front;
int xstart, ystart, xend, yend;
int ray;

void setup()
{
    size(961, 534);
    img = loadImage("back.jpg");
    front = loadImage("front.jpg");
    xstart = 0;
    ystart = 0;
    xend = img.width;
    yend = img.height;
    ray = 50;
}

void draw() 
{
    {
        img.loadPixels();
        front.loadPixels();

        // loop over image pixels 
        for (int x = xstart; x < xend; x++)
        {
            for (int y = ystart; y < yend; y++ )
            {
                int loc = x + y*img.width;
                float dd = dist(mouseX, mouseY, x, y);        
                // pixels distance less than ray  

                if (mousePressed && dd < 50)
                {
                    // set equal pixel
                    front.pixels[loc] = img.pixels[loc];
                }
                else
                {
                    if (!mousePressed)
                    {
                      // reset- this is what I have not been able to work as of yet
                      front.pixels[loc] =   ;

                    }
                }
            }
        }
        img.updatePixels();
        front.updatePixels();
        // show front image
        image(front, 0, 0);
    }    
}

1 Ответ

1 голос
/ 08 марта 2019

Я рекомендую использовать mask вместо изменения пикселей изображения. Создайте пустое изображение и свяжите его как маску с изображением:

img = loadImage("back.jpg");
front = loadImage("front.jpg");
mask = createImage(img.width, img.height, RGB);
img.mask(mask);

Если вы теперь рисуете оба изображения, то вы можете «видеть» только изображение front:

image(front, 0, 0);
image(img, 0, 0);

Установите цвет маски (255, 255, 255) вместо изменения пикселя front:

mask.pixels[loc] = color(255, 255, 255);

и повторно примените маску к изображению

img.mask(mask);

Когда кнопка мыши отпущена, пиксели маски необходимо изменить обратно на (0, 0, 0) или просто создать новую и пустую маску:

mask = createImage(img.width, img.height, RGB);

См. Пример, где я применил предложения к вашему исходному коду:

PImage img, front, mask;
int xstart, ystart, xend, yend;
int ray;

void setup() {
    size(961, 534);

    img = loadImage("back.jpg");
    front = loadImage("front.jpg");
    mask = createImage(img.width, img.height, RGB);
    img.mask(mask);

    xstart = 0;
    ystart = 0;
    xend = img.width;
    yend = img.height;
    ray = 50;
}

void draw() {
    img.loadPixels();
    front.loadPixels();

    // loop over image pixels 
    for (int x = xstart; x < xend; x++) {
        for (int y = ystart; y < yend; y++ ) {
            int loc = x + y*img.width;
            float dd = dist(mouseX, mouseY, x, y);        

            if (mousePressed && dd < 50) {
                mask.pixels[loc] = color(255, 255, 255);
            }
            else {
                if (!mousePressed) {
                    //mask = createImage(img.width, img.height, RGB);
                    mask.pixels[loc] = color(0, 0, 0);
                }
            }
        }
    }
    mask.updatePixels();
    img.mask(mask);

    // show front image
    image(front, 0, 0);
    image(img, 0, 0);
}    
...