Обрабатывает обновления скетча, но не рисует - PullRequest
0 голосов
/ 15 января 2019

Поэтому я пытаюсь написать эскиз обработки, чтобы изменить цвет изображения.

Но по какой-то причине он всегда делает вещи, которые я даже не могу понять.Например, оно просто не будет обновлять полученное изображение, даже когда я изменяю его цвета.

Когда я проверяю, цвета изображения меняются, но это просто не меняется на экране.

Иногда это также меняет только некоторые части изображения.

Я бы очень признателен, если бы кто-то взглянул на это.

Спасибо.

Вот мой код:

PImage img;
PImage image;

void setup() {
  fullScreen();
  img = loadImage("ship.jpg");
  image = img;
  for (int i = 0; i < img.pixels.length; i++) {
    color c = color(img.pixels[i]);
    float re = red(c);
    float gree = green(c);
    float blu = blue(c);
    image.pixels[i] = color(re, gree, blu);
  }
}

void draw() {
  float r = random(255);
  float g = random(255);
  float b = random(255);
  PImage newI = img;

  for (int i = 0; i < newI.pixels.length; i++) {
    float red = red(image.pixels[i]);
    float re = warp(r+red, 0, 255);

    float green = green(image.pixels[i]);
    float gree = warp(g+green, 0, 255);

    float blue = blue(image.pixels[i]);
    float blu = warp(b+blue, 0, 255);

    newI.pixels[i] = color(re, gree, blu);
  }
  image(newI, 0, 0);
  println(red(newI.pixels[0]) + "-" + green(newI.pixels[0]) + "-" + blue(newI.pixels[0]));
}

float warp(float v, float start, float stop) {
  if (v < start) {
    float rest = start-v;
    v = stop-rest;
    v = warp(v, start, stop);
  }
  if (v > stop) {
    float rest = v-stop;
    v = start+rest;
    v = warp(v, start, stop);
  }
  return v;
}

1 Ответ

0 голосов
/ 15 января 2019

Я думаю, что вам может потребоваться позвонить loadPixels() перед выполнением модификации и updatePixels() после выполнения модификации.

С ссылка :

PImage myImage;
int halfImage;

void setup() {
  size(100, 100);
  halfImage = width * height/2;
  myImage = loadImage("apples.jpg");
  myImage.loadPixels();
  for (int i = 0; i < halfImage; i++) {
    myImage.pixels[i+halfImage] = myImage.pixels[i];
  }
  myImage.updatePixels();
}

void draw() {
  image(myImage, 0, 0);
}
...