jol*_*ier 11 android bitmapfactory android-bitmap
在我的Android应用程序中,我上传并下载JPEG图像.对于某些图像BitmapFactory下采样下载的图像,我不明白为什么以及如何阻止它这样做.我上传和下载图像时记录Bitmap对象大小:
Uploading image with size 3840x2160
Opening received image of size 2601584B degradation 0 decoded 384x216
所以这里我的图像宽度和高度在解码后除以10 BitmapFactory.对于另一个图像,我从3480x4640到217x290,因此除以16.我首先想到它可能是由图像dpi元数据引起的,所以我尝试使用以下代码打开图像时强制它:
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 1 << degradation;
opts.inScaled = false;
opts.inDensity = 1;
opts.inTargetDensity = 1;
opts.inScreenDensity = 1;
final Bitmap original = BitmapFactory.decodeByteArray(data, 0, data.length, opts);
Log.d(Tags.IMAGES, "Opening received image of size " + data.length + " degradation " + degradation + " decoded " + original.getWidth() + "x" + original.getHeight());
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我给出的字节数(2MB)BitmapFactory与没有300x200px图像的大图像一致.所以我的上传代码和下载代码是正确的我在解码之前有正确的数据.
我强制所有密度以避免缩放并禁用缩放,我的样本大小为1,因为我的降级为0所以我不强制进行任何子采样.我仍然以一个非常小的图像结束.并BitmapFactory.decodeByteArray快速调用本机代码,所以我无法真正调试它.
我试过了:
BitmapFactory.Options对象中的所有密度设置为0,但这并没有改变一件事.decodeByteArray方法,仍然图像太小.好吧,经过更多调查,我发现了这个问题,这是由于代码的另一部分造成的。由于应用程序中的竞争条件,我同时将图像及其缩影写入同一文件。所以我最终得到了一个大图像文件,但它的开头被一个小图像覆盖,这就是 BitmapFactory 创建这个小图像的原因。抱歉,问题不在这部分代码中,因此您找不到它。
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |