如何将BMP转换为PNG(或JPEG)而不会劣化?

问题描述 投票:0回答:1

我想将位图图像转换为PNG而不劣化。我正在尝试使用下面的代码。它可以工作,但是转换后图像的颜色有很大的不同(请看附件图像)。这是什么原因?

此图像的分辨率为30px * 30px。 (处理前和处理后的图像尺寸不同,但实际像素数相同)

        val bitmap = (any bitmap image)
        val fos = FileOutputStream(saveDir)
        var newBitmap = Bitmap.createBitmap(bitmap.width, bitmap.height, bitmap.config)
        var canvas = Canvas(newBitmap)
        canvas.drawBitmap(bitmap, 0f, 0f, null)
        newBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos)
        fos.flush()
        fos.close()

之前(位图)https://imgur.com/YdpMX7b

[之后(PNG)https://imgur.com/s45No63

android kotlin android-bitmap
1个回答
0
投票

我解决了这个问题。原因是位图的alpha值。我通过AndroidAssetStudio制作了此原始图标图像。https://romannurik.github.io/AndroidAssetStudio/

我制作的图像具有alpha值,因此我没有意识到它隐藏了真实的图标颜色。它不是红色的,如#FF0000。所以它的颜色没有我预期的那样。

我在使用bitmap.compress之前,通过将原始图像的扩展名从bmp更改为jpeg bmp删除了alpha值。然后它起作用了。

谢谢您的回答。

© www.soinside.com 2019 - 2024. All rights reserved.