如何更改保存的透明位图的背景颜色

28

我将一个png图像打开并转换成Bitmap格式,在对其进行一些修改后,以jpg格式保存到磁盘中。但当png图像中存在透明区域时,它们会被保存为黑色。是否有方法可以更改此默认行为,使图像保存为不同颜色的背景,例如白色?

谢谢。

3个回答

67

你可以将它绘制到一个新的位图上,例如:

   Bitmap newBitmap = Bitmap.createBitmap(image.getWidth(), 
    image.getHeight(), image.getConfig());
    Canvas canvas = new Canvas(newBitmap);
    canvas.drawColor(Color.WHITE);
    canvas.drawBitmap(image, 0F, 0F, null);

然后保存新的位图。


3
当我保存画布图像时,背景颜色会变成黑色。还有其他方法可以改变吗?提前感谢。 - Rahul Baradia
有没有办法改变黑色背景颜色? - Homen
@RahulBaradia,你可以检查我的答案,可能会有所帮助。 - Muhammed Refaat
@Homen,你可以查看我的答案,它可能会对你有所帮助。 - Muhammed Refaat

9
要保存一张图片并保留它的透明区域,您不能将其保存为JPG格式,必须将其保存为PNG格式,而且,在保存图像之前,设置setHasAlpha()的设置为true,这样做就像这样:
保存之前:
mBitmap.setHasAlpha(true);

当保存时,请使用您正在使用的任何保存方法将图像保存为PNG格式,例如:

File file = new File(folderDir, name);
try {
    file.createNewFile();
} catch (IOException e) {
    e.printStackTrace();
}
FileOutputStream out = new FileOutputStream(file);
mBitmap.setHasAlpha(true);
mBitmap.compress(Bitmap.CompressFormat.PNG, 80, out);
out.flush();
out.close();

1
是的,我的问题是保存为JPEG而不是PNG。谢谢! - Grux
@Grux,很高兴我的答案能对您有所帮助。 - Muhammed Refaat
1
谢谢,你刚刚救了我的一天.. 这个答案真的很有帮助.. - Kalpesh Kundanani
@KalpeshKundanani 不客气 :)) - Muhammed Refaat

0

对于 Kotlin,您可以使用此扩展函数

/**
 * Returns a new Bitmap with provided background color and recycles the current one.
 */
fun Bitmap.changeBackgroundColor(color: Int): Bitmap {
    val newBitmap = Bitmap.createBitmap(width, height, config)
    val canvas = Canvas(newBitmap)
    canvas.drawColor(color)
    canvas.drawBitmap(this, 0F, 0F, null)
    recycle()
    return newBitmap
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接