【问题标题】:Strange arctefact in UIImage juxtaposition on retina display视网膜显示器上的 UIImage 并列中出现奇怪的 arctefact
【发布时间】:2012-07-16 04:14:43
【问题描述】:

我的应用程序中有一个非常奇怪的问题,它只发生在Retina 显示屏不是模拟器

我开发了一组嵌入了 openstreetmaps 瓦片(地图片段)的应用程序。

在每个应用程序中,我都有很多显示在 UIScrollView 中的地图 (256px/256px)。 它在非视网膜设备和视网膜模拟器上完美运行。

问题:每个图块的最后一行像素以随机颜色出现(大多数时候是黑色)

为了说明,我用设备和模拟器对同一个地方进行了截图。它们组合在一张图片中:

可以看到黑色像素线不是在tile之外,而是在tile中最后一个像素行(导致两个屏幕之间没有移位)

甚至更奇怪的是:有时,当瓦片中的颜色变化很小时,像素线会采用随机元素的颜色,有时根本不会出现!

这里,蓝线,灰线,黑线.....

编辑:

我对代码进行了很多简化,并且仅加载这 2 个图块时出现故障:

int W = 256;
int H = 256;
NSString * map1 = [[NSBundle mainBundle] pathForResource:@"test1.png" ofType:nil];
NSString * map2 = [[NSBundle mainBundle] pathForResource:@"test2.png" ofType:nil];
UIImageView * pieceOfMap1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, H*0, W, H)];
UIImageView * pieceOfMap2 = [[UIImageView alloc] initWithFrame:CGRectMake(0, H*1, W, H)];
[pieceOfMap1 setImage:[UIImage imageWithContentsOfFile:map1]];
[pieceOfMap2 setImage:[UIImage imageWithContentsOfFile:map2]];
[self.view addSubview:pieceOfMap1];
[self.view addSubview:pieceOfMap2];

我尝试使用 128x128 @2x 瓷砖,但问题仍然存在!
会不会来自 OpenStreetMaps 图片?

我的两个图块可以在这里下载:http://dl.free.fr/n08C6JIqW

【问题讨论】:

  • 我的建议是添加一大堆日志语句,您可以在其中指定图块框架和大小。这看起来像是一个浮点问题,您要指定具有小小数部分的数字。
  • 感谢您的评论。我的每个帧操作数都是整数。我已经记录了这块地图框,并且使用视网膜模拟器和视网膜设备记录了完全相同的日志。我宁愿认为这将是一个调整大小的故障。
  • 我做了更多的测试,我什至可以用非常简化的代码重现这个错误。我编辑了我的问题。
  • 也许你应该使用浮点数而不是整数。 CGFLoat w = 250.0f;和 CGRectMake(0, h*1.0f, w, h)
  • 我试过了,我什至记录了每个变量,没有发生任何奇怪的事情,并且线路保持不变。

标签: ios png openstreetmap retina-display


【解决方案1】:

好的。

我只是在 Photoshop 中打开了两个测试图块,没有做任何更改,然后再次保存在 png 中。

黑线不再出现。

所以它来自打开的街道地图PNG图像(要获取其中一张,请转到http://www.openstreetmap.org/,在地图上右键单击,然后保存图像)

问题已部分解释,但现在我有 2067 个文件要 Photoshop...

我用谷歌搜索了它,但我没有找到任何可以解释的东西......

如果没有其他解释,我会接受我自己的答案,但如果有人给我一些理解为什么,我会很高兴。

【讨论】:

  • PNG 格式总体上是相当复杂的——正常使用显然不是。除了 PhotoShop,您还有其他选择。 Mac自带sip,可以轻松搞定pngcrush和对png进行操作的朋友。可能是如果您在图像上使用 pngcrush,或者使用 sip 将其转换为 jpg,问题也会消失。我看过一些帖子,其中谈到 iOS 有时无法准确显示 PNG,因为它们中有不常见的设置。
  • 好的,非常感谢。我成功地尝试了 rapidoResizer,但 png 文件现在大了两倍。我通过将文件转换为 jpeg 来尝试 sips,但是 jpeg 比带有这些图像的 png 重。我没有成功安装 pngcrush...
  • pngcrush 已经安装在 Xcode 应用程序中 - /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/pngcrush
猜你喜欢
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
相关资源
最近更新 更多