为了账号安全,请及时绑定邮箱和手机立即绑定

在运行时调整图像大小时出现质量问题

在运行时调整图像大小时出现质量问题

UYOU 2019-10-25 10:57:21
我的磁盘上有一个映像文件,我正在调整文件的大小并将其作为新的映像文件保存回磁盘。出于这个问题,我并不是为了将它们显示在屏幕上而将它们带入内存中,只是为了调整它们的大小并重新保存它们。这一切都很好。但是,缩放后的图像上会出现伪像,如下所示: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);然后我用以下方法进行实际缩放:Bitmap scaledBitmap = Bitmap.createScaledBitmap(sampledSrcBitmap, desiredWidth, desiredHeight, false);最后,使用以下命令将新调整大小的映像保存到磁盘:FileOutputStream out = new FileOutputStream(newFilePathString);scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);然后,正如我提到的,如果我从磁盘上拉出文件并进行查看,它上面存在链接的质量问题,看起来很糟糕。如果我跳过createScaledBitmap,而只是将sampledSrcBitmap直接保存回磁盘,就没有问题,似乎只有在大小更改时才会发生。正如您在代码中所看到的,我已经尝试过将inDither设置为false,如此处http://groups.google.com/group/android-developers/browse_thread/thread/8b1abdbe881f9f71所述,并且如上文第一篇链接文章所述。那什么都没改变。另外,在我链接的第一篇文章中,罗曼·盖伊说:而不是在绘制时调整大小(这将是非常昂贵的),请尝试在屏幕外的位图上调整大小,并确保位图为32位(ARGB888)。但是,我不知道如何在整个过程中确保位图保持为32位。我还阅读了其他几篇文章,例如http://android.nakatome.net/2010/04/bitmap-basics.html,但它们似乎都在解决绘图和显示位图的问题,我只想调整它的大小并将其保存回磁盘,而不会出现此质量问题。非常感谢
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 671 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信