我在磁盘上有一个图像文件,我正在调整文件大小并将其作为新的图像文件保存回磁盘.为了这个问题,我没有将它们带入内存以便在屏幕上显示它们,只是为了调整它们并重新保存它们.这一切都很好.但是,缩放后的图像上有如下所示的工件:android:运行时调整大小的图像质量
它们会因为这种失真而被保存,因为我可以将它们从磁盘上取下并在计算机上查看它们,但它们仍然存在同样的问题.
在将图像加载到Bitmap对象以将位图解码到内存时,我使用类似于此奇怪的内存不足问题的代码:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imageFilePathString, options);
int srcWidth = options.outWidth;
int srcHeight = options.outHeight;
int scale = 1;
while(srcWidth / 2 > desiredWidth){
srcWidth /= 2;
srcHeight /= 2;
scale *= 2;
}
options.inJustDecodeBounds = false;
options.inDither = false;
options.inSampleSize = scale;
Bitmap sampledSrcBitmap = BitmapFactory.decodeFile(imageFilePathString, options);
Run Code Online (Sandbox Code Playgroud)
然后我正在进行实际缩放:
Bitmap scaledBitmap = Bitmap.createScaledBitmap(sampledSrcBitmap, desiredWidth, desiredHeight, false);
Run Code Online (Sandbox Code Playgroud)
最后,新调整大小的图像将保存到磁盘:
FileOutputStream out = new FileOutputStream(newFilePathString);
scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
Run Code Online (Sandbox Code Playgroud)
然后,正如我所提到的,如果我将该文件从磁盘中拉出来并查看它,它就会将质量问题链接到上面并且看起来很糟糕.如果我跳过createScaledBitmap并将samplesSrcBitmap直接保存回磁盘就没有问题,似乎只有在大小改变时才会发生.
我已经尝试过,正如您在代码中看到的那样,设置inDither为false,如http://groups.google.com/group/android-developers/browse_thread/thread/8b1abdbe881f9f71所述,并在上面的第一个链接帖子中提到.这并没有改变任何事情.另外,在我链接的第一篇文章中,罗曼盖伊说:
不要在绘图时调整大小(这将是非常昂贵的),尝试在屏幕外位图中调整大小并确保位图为32位(ARGB888). …