在Android中干净地缩小图像:可以这样做吗?

在Android中干净地缩小图像:可以这样做吗?,第1张

概述我在 Android上干净地缩小图像时遇到了麻烦.我希望在任意大小的原始大小的10-100%之间缩放小PNG图像. 我已经创建了一个示例图像来演示问题,并加剧了我在Android图像缩放器中看到的异常行为: 上图是来自Android设备的屏幕截图,其中添加了一些注释.我还在左侧的第二列中添加了相同的图像,显​​示了如何使用“GIMP”(GNU图像处理程序)进行线性缩放. 基本图像由红色和蓝色像素的 我在 Android上干净地缩小图像时遇到了麻烦.我希望在任意大小的原始大小的10-100%之间缩放小PNG图像.

我已经创建了一个示例图像来演示问题,并加剧了我在AndroID图像缩放器中看到的异常行为:

上图是来自AndroID设备的屏幕截图,其中添加了一些注释.我还在左侧的第二列中添加了相同的图像,显​​示了如何使用“GIMP”(GNU图像处理程序)进行线性缩放.

基本图像由红色和蓝色像素的棋盘图案背景组成.在那个背景上,我画了一些1px宽的黄色线条和相当薄的绿色文字.图像为288×288像素.

当将图像缩放到原始尺寸的1/3时,AndroID似乎只抓住九个像素中的一个,抛弃所有其他数据.因此,一些黄线完全消失.值得注意的是,棋盘图案保持完整(这仅仅是使用每个第3个像素的结果).

当将图像缩放到其原始尺寸的接近但不精确的50%的尺寸时,例如,142×142或143×143,缩放器在图像上产生一些相当大的异常/伪像.

尺寸为50%(144×144)时,图像看起来正确.

测试图像确实带来了最差的图像缩放器,但“正常”的PNG图标图像也受到严重影响.从10-33%左右,图像没有被正确地重新采样,因此看起来非常“位图”.并且某些较大尺寸的图像在某些尺寸下具有非常奇怪的异常.

如果有人知道一种方法来禁用这种奇怪的缩放行为,即使是在性能成本上,我也非常感谢你知道它.它当然可以通过编写一个直接作用于位图像素的算法来解决,但我希望这不是唯一的选择.

另外值得注意的是,所有图像工作都是使用ARGB_8888 Bitmap.Configs完成的.我尝试通过在ImageVIEws上设置maxwIDth / maxheight来 *** 作图像大小,使用Bitmap.createScaledBitmap(),并使用Bitmap.createBitmap和Matrix.所有尝试都有同样的结果.启用位图过滤.

再次感谢您的任何建议!

解决方法 使用Bitmap.createScaledBitmap()和Bitmap.createBitmap与Matrix是一样的; see the source for Bitmap.createScaledBitmap(自AndroID 2以来没有变化).

在AndroID 4.0上,使用矩阵(如在Bitmap.createScaledBitmap中)允许硬件加速 *** 作(如果启用了4.1 IIRC),因此我们无法直接控制正在执行的 *** 作以及如何完成.

这意味着您必须使用所需的(此处为线性)过滤来实现您自己的缩放方法;通过像素处理;或者使用带有良好过滤器的OpenGL ES,但它可能并非在所有设备上都可用.

总结

以上是内存溢出为你收集整理的在Android中干净地缩小图像:可以这样做吗?全部内容,希望文章能够帮你解决在Android中干净地缩小图像:可以这样做吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1126882.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存