处理透明度是否支持去除背景?
Does Processing transparency support removing backgrounds?
我有一张绿色背景的图片。
我用这个功能去除了背景。
public void removeBackground(PImage img, color c, float thres) {
colorMode(HSB);
for(int i = 0; i < img.width; i++){
for(int j = 0; j < img.height; j++){
color cp = img.get(i, j);
//threshold accounts for compression
if(abs(hue(cp) - hue(c)) < thres){
img.set(i, j, color(0,0,0,0));
}
}
}
}
使用这些参数,我尝试删除背景。
PImage FBSprite;
public void settings() {
size(500, 500);
}
void setup(){
FBSprite = loadImage("FlappyBirdSprite.jpg");
FBSprite.resize(50, 0);
removeBackground(FBSprite, FBSprite.get(0,0), 0.5);
image(FBSprite, 0, 0);
}
void draw(){
background(200);
image(FBSprite, 0, 0);
}
背景变成黑色而不是透明。
ARGB 结果:
具有 1 个 alpha 的 HSB 结果:
我没有将要移除的像素的 alpha 设置为 0,而是将 alpha 设置为 1。alpha 太小了,您看不到边框。
你会喜欢这个:改变这一行
colorMode(HSB);
为此:
colorMode(ARGB);
它应该可以解决问题。刚刚发生了什么?除非你需要 在那个非常特定的时间点在 HSB 工作,否则没有意义。 ARGB 与 RGB 类似,但它具有 ALPHA 设置,或者如果您愿意,也可以设置透明度。自从您像这样设置 color(0,0,0,0)
后,您似乎已经准备好在 ARGB 中工作,所以这可能是一个 copy and paste programming
问题。或者也许你只是没有注意到。它总是发生在我身上。但是,如果这是第一件事,请尝试在将来对此类问题保持敏锐的眼光。除了众所周知的意大利面条代码之外,大多数人不会谈论其他糟糕的设计模式,但是 cut and paste programming 是真实存在的并且会造成很大伤害,尤其是当您使用一些文档不存在的内部平台时。这不是发生在我身上。
玩得开心!
我有一张绿色背景的图片。
我用这个功能去除了背景。
public void removeBackground(PImage img, color c, float thres) {
colorMode(HSB);
for(int i = 0; i < img.width; i++){
for(int j = 0; j < img.height; j++){
color cp = img.get(i, j);
//threshold accounts for compression
if(abs(hue(cp) - hue(c)) < thres){
img.set(i, j, color(0,0,0,0));
}
}
}
}
使用这些参数,我尝试删除背景。
PImage FBSprite;
public void settings() {
size(500, 500);
}
void setup(){
FBSprite = loadImage("FlappyBirdSprite.jpg");
FBSprite.resize(50, 0);
removeBackground(FBSprite, FBSprite.get(0,0), 0.5);
image(FBSprite, 0, 0);
}
void draw(){
background(200);
image(FBSprite, 0, 0);
}
背景变成黑色而不是透明。
ARGB 结果:
具有 1 个 alpha 的 HSB 结果:
我没有将要移除的像素的 alpha 设置为 0,而是将 alpha 设置为 1。alpha 太小了,您看不到边框。
你会喜欢这个:改变这一行
colorMode(HSB);
为此:
colorMode(ARGB);
它应该可以解决问题。刚刚发生了什么?除非你需要 在那个非常特定的时间点在 HSB 工作,否则没有意义。 ARGB 与 RGB 类似,但它具有 ALPHA 设置,或者如果您愿意,也可以设置透明度。自从您像这样设置 color(0,0,0,0)
后,您似乎已经准备好在 ARGB 中工作,所以这可能是一个 copy and paste programming
问题。或者也许你只是没有注意到。它总是发生在我身上。但是,如果这是第一件事,请尝试在将来对此类问题保持敏锐的眼光。除了众所周知的意大利面条代码之外,大多数人不会谈论其他糟糕的设计模式,但是 cut and paste programming 是真实存在的并且会造成很大伤害,尤其是当您使用一些文档不存在的内部平台时。这不是发生在我身上。
玩得开心!