【发布时间】:2011-06-02 03:14:44
【问题描述】:
我正在将 png 图像打开为位图,对其进行一些修改,然后将其以 jpg 格式保存到磁盘。在 png 有一些透明区域的情况下,它们被保存为黑色。有没有办法更改此默认行为,以便使用不同颜色的背景(例如白色)保存图像?
谢谢
【问题讨论】:
标签: android bitmap transparency
我正在将 png 图像打开为位图,对其进行一些修改,然后将其以 jpg 格式保存到磁盘。在 png 有一些透明区域的情况下,它们被保存为黑色。有没有办法更改此默认行为,以便使用不同颜色的背景(例如白色)保存图像?
谢谢
【问题讨论】:
标签: android bitmap transparency
你可以把它画到一个新的位图上,例如
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);
然后保存新的位图
【讨论】:
要保存图像并保留其透明区域,您不能将其保存为 JPG,您必须将其保存为 PNG,不仅如此,还要将 setHasAlpha() 的设置设置为 true BEFORE 保存图片,所以会是这样:
保存前:
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();
【讨论】:
对于 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
}
【讨论】: