android - BitmapFactory 无法对 CipherInputStream 解码两次

标签 android image encryption

我加密,然后解密图像,然后将其传递给图像实用程序以调整大小,(从某处借用的代码)如下所示:

public static Bitmap loadResizedBitmap(InputStream dis, int width, int height) {

    BufferedInputStream bis = new BufferedInputStream(dis);
    Bitmap bitmap = null;
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeStream(bis, null, options);
    if (options.outHeight > 0 && options.outWidth > 0) {
        options.inJustDecodeBounds = false;
        options.inSampleSize = 2;

        while (options.outWidth / options.inSampleSize > width && 
                options.outHeight / options.inSampleSize > height) {
            options.inSampleSize++;
        }
        options.inSampleSize--;
        bitmap = BitmapFactory.decodeStream(bis, null, options);
    }
    return bitmap;
}

问题是在第二个 decodeStream 期间,BitmapFactory 返回 null。我已经验证了第一个有效,并输出了正确的大小等。我的猜测是 CipherInputStream 不支持标记和重置,所以我将它包装在 BufferedInputStream 中,但没有成功。还有人有什么建议吗?

最佳答案

[已回答]

我将其切换为使用 BitmapFactory.decodeByteArray 并解决了这个问题。我再次查看了 API,我能够传递一个 byte[]。

我的结论是 CipherInputStream 不支持 mark() 和 reset()。

关于android - BitmapFactory 无法对 CipherInputStream 解码两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4622277/

相关文章:

android - Firebase 屏幕名称显示未设置

jquery - 图像随机淡入和淡出

ios - 在钥匙串(keychain)中保存加密的字符串

android - 如何在Android中一键删除 map View 中的所有标记?

Android:铃声在设置>声音和显示>手机铃声中不可见

android - 更改 BottomSheetDialogFragment 的稀松布颜色

c# - drawString方法如何用对角线写法

android - 如何有效地修改从相机捕获的字节?

javax.crypto.IllegalBlockSizeException : Data must not be longer than 256 bytes

c# - 为什么不使用 DPAPI 加密所有设置而不是只加密主密码?