我已经创建了一个示例图像来演示问题,并加剧了我在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中干净地缩小图像:可以这样做吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)