java - 将字节数组解码为已在 Java 中压缩的位图

标签 java android bitmap compression bytearray

我正在用以下方式压缩位图

Bitmap bmpSig = getMyBitMap();
int size = bmpSig.getWidth() * bmpSig.getHeight();
ByteArrayOutputStream out = new ByteArrayOutputStream(size);
bmpSig.compress(Bitmap.CompressFormat.JPEG, 100, out);   
byte[] bytSig = out.toByteArray();

然后我尝试从字节数组中在 Android ImageView 中显示图像。当我这样做时,我得到一个全黑的图像。

ImageView myImg = (ImageView) findViewById(R.id.img_view);
myImg.setImageBitmap(BitmapFactory.decodeByteArray(bytSig, 0, bytSig.length));

我假设这是因为我在 BitmapFactory.decodeByteArray() 之前缺少一个步骤来反转 jpeg 压缩。还是我误解了压缩的工作原理?

最佳答案

我没有意识到我的位图(来自 Canvas 对象)的背景是透明的。由于此位图只是白色背景上的黑色线条,因此黑色图像是由于压缩为 JPEG 使图像具有黑色背景。

我变了

bmpSig.compress(Bitmap.CompressFormat.JPEG, 100, out); 

bmpSig.compress(Bitmap.CompressFormat.PNG, 100, out); 

它按预期工作。

关于java - 将字节数组解码为已在 Java 中压缩的位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5243547/

相关文章:

android - cordova.file.externalRootDirectory 不适用于 Android 11 设备

file-io - 使用 Gforth 输出文件

android - 无法在 SD 卡中创建文件

java - Itext PdfTextExtractor 构造函数未定义

java - 无法通过java播放音频文件

java - 可视化逻辑流程的程序

java - 将图片从 Android 应用程序发送到服务器 http post

java - 从 STS 中永久删除 Pivotal tc

android - Android Studio-如何使用Gradle将资源文件包含在Java包中

java - 如何处理libGDX的Box2D ContactListener中的空指针异常?