如何解决组装大量 PImage 无法正常工作
重新编写代码
我使用回复中给出的想法编写了一个新代码,并在一个较小的样本上进行了尝试,但我仍然不明白为什么在最终结果中我的“头”没有被擦除。
新代码如下所示:
void drawBodyPart(PImage body,PImage bodyPart,String name){
body.loadPixels();
bodyPart.loadPixels();
for(int i = 0; i < body.width; i++){
for(int j = 0; j < body.height; j++){
int position = i + body.width*j;
if(alpha(bodyPart.pixels[position]) > 25){
body.pixels[position] = bodyPart.pixels[position];
}
}
}
body.updatePixels();
body.save(folderName + name + ".png");
}
for(int i = 0; i < humanBodyList.size(); i++){
for(int j = 0; j < humanHairsList.size(); j++){
humanBodyList.get(i).loadPixels();
humanBodyList.get(i).updatePixels();
drawBodyPart(humanBodyList.get(i),humanHairsList.get(j),"(" + i + "," + j+")");
}
最后,我在第一组身体上正确绘制了第一个头部。 然后我得到了第一个头,与第二个与身体合并。 我什至保存了身体合并的中间产品......我尝试的越多,我就越不了解处理中的 PImages 操作。
----- 下面的旧描述-----
我正在做一个小的“处理 3”项目,我尝试通过将不同的身体部位合并在一起来构建一些角色图像。我有:
- 一组“身体”图像:body1.png、body2.png...
- 一组“头部”图像:head1.png、head2.png...
- 一组头发(同上)
基本上我所做的是将“body1 + head1 + hairs1”合并在一起以获得1个整个角色。
每个子部分图片具有相同的高度/宽度,除了我真正感兴趣的部分外,大部分都是透明的。所以我比较了 2 个所述子图片的像素,并根据透明度在结果图片中保留它们。再次继续下一个身体部位,直到每个身体部位都包含在您的最终图片中,然后保存。
我对头部、身体和头发的每一种可能的组合都这样做。循环不是问题(我最后有正确的图片数量)。 我的问题是,有些图片是错误的。就像之前图片的缓冲区不为空。结果你可以看到角色的头部在前一个头发的一些残留物的前面(见最后的图片)
我的代码如下:
void humanAssembly(PImage head,PImage body,PImage hairs,String name){
PImage result= body;
head.loadPixels();
body.loadPixels();
hairs.loadPixels();
corpsAssemble.loadPixels();
//Merging body and head
for(int i = 0; i < body.width; i++){
for(int j = 0; j < body.height; j++){
int position = i + body.width*j;
if(alpha(hairs.pixels[position]) > 25){
result.pixels[position] = hairs.pixels[position];
}else if(alpha(head.pixels[position]) > 25){
result.pixels[position] = head.pixels[position];
}
}
}
body.updatePixels();
result.save(imagesRepository + "/generes/" + name+ ".png");
}
(显然我的代码效率不高,但我不打算处理超过几百种可能性的非常小的图像,并且这段代码应该运行一次)
humanAssembly(listHumanHead.get(i),listHumanBody.get(j),listHumanHairs.get(k)," + j + "," + k + ")");
其中“listHumanX”是之前成功加载过的ArrayList。
这可能是一些愚蠢的错误,但很长时间后我没有找到它的位置,所以如果有人能帮助我,我将不胜感激。 提前致谢。任何有效的并且可以被我这个可怜的新手理解的东西就足够了:)
A correct result : body 1,head 1,hairs 1
A correct result : body 1,hairs 2
A correct result : body 1,head 2,hairs 2
An icorrect result : body 1,hairs 1,you still can see the hairs 1 (bald)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。