我尝试使用Processing中的以下代码生成简单图像:
int imageSize = 256;
void setup()
{
size(256, 256);
background(0, 0);
noLoop();
}
void draw()
{
float center = imageSize / 2.0;
float maxDist = sqrt(128 * 128 * 2);
for (int y = 0; y < imageSize; ++y)
{
for (int x = 0; x < imageSize; ++x)
{
float dist = sqrt(pow(x - center, 2) + pow(y - center, 2));
float factor = dist / maxDist;
stroke(255, 255, 255, 255 - 255 * factor);
point(x, y);
}
}
save("output.png");
}
从代码中可以看出,输出图像在中心应该是不透明的,而在角落附近应该是透明的。但是,实际生成的PNG图像完全不透明:
有什么方法可以解决这个问题吗?即以某种方式禁用背景或强制它完全透明?
答案 0 :(得分:2)
您不能拥有透明框架,并且通过调用save()
函数,您将当前框架保存到文件中。所以该文件永远不会有任何透明度。
相反,您应该创建自己的PGraphics
实例,该实例始于完全透明。然后绘制并使用PGraphics.save()
将其保存到文件中。像这样:
PGraphics img;
void setup() {
size(100, 100);
img = createGraphics(width, height);
}
void draw() {
//draw to the image
img.beginDraw();
img.fill(255);
img.ellipseMode(RADIUS);
img.ellipse(mouseX, mouseY, 10, 10);
img.endDraw();
//optional: draw the PGraphics to the screen
background(0);
image(img, 0, 0);
}
//save the PGraphics to file
void mousePressed() {
img.save("image_" + millis() + ".png");
}