问题描述
我正在尝试将图像切割成四个正方形部分的网格,然后随机重新排列它们。我以为我可以使用 copy();实现这一目标的函数 - 将图像切成四部分 - 然后将这些部分加载到 PGraphics 数组中。下一步是将它们从阵列中取出并随机分布到网格中。为此,我认为网格应该由二维数组构建......
这是我目前想到的:
{{1}}
所以我设法通过不同的步骤从头开始构建代码 - 但替换太疯狂了 - 我不再确定我是否在正确的轨道上!是否可以将复制功能中复制的部分作为单个 PGraphics 加载到数组中?
感谢您的任何提示或帮助!
解决方法
这是使用 PGraphics
的一种方式:
PImage src;
PGraphics[] pgs = new PGraphics[4];
void setup() {
size(1080,1080);
frameRate(5);
src = loadImage("dog.jpg");
src.resize(width,height);
for (int i = 0; i < imgs.length; i++) {
pgs[i] = createGraphics(width/2,height/2);
pgs[i].beginDraw();
pgs[i].copy(src,(i % 2) * width/2,floor(i/2) * height/2,width/2,height/2,height/2);
pgs[i].endDraw();
}
}
void draw() {
background(255);
for (int i = 0; i < pgs.length; i++) {
image(pgs[int(random(pgs.length))],floor(i / 2) * height/2);
}
}
您也可以使用 PImage
:
PImage src;
PImage[] imgs = new PImage[4];
void setup() {
size(1080,height);
for (int i = 0; i < imgs.length; i++) {
imgs[i] = createImage(width/2,RGB);
imgs[i].copy(src,height/2);
}
}
void draw() {
background(255);
for (int i = 0; i < imgs.length; i++) {
image(imgs[int(random(imgs.length))],floor(i / 2) * height/2);
}
}
您也可以在没有图像数组的情况下执行此操作,只需在每一帧直接从源复制:
PImage src;
void setup() {
size(1080,height);
}
void draw() {
background(255);
for (int i = 0; i < 4; i++) {
int j = int(random(4));
copy(src,(j % 2) * width/2,floor(j / 2) * height/2,floor(i / 2) * height/2,height/2);
}
}
尽管这最后一种方法会占用更多资源,而且事后更难操作。