具有嵌入式cap insets的可调整大小的图像资源

时间:2012-05-07 21:53:18

标签: objective-c ios uiimage png

到目前为止,这已经不仅仅是一个我一直很好奇的事情。

有一个众所周知的-[UIImage resizableImageWithCapInsets:] API用于创建可调整大小的图像,在对可变尺寸按钮和框架进行纹理处理时非常方便,特别是在视网膜iPad上,特别是如果你有很多这些并且你想要避免使图像资源膨胀应用程序包。

对于给定的图像,无论我们想要将其拉伸到什么尺寸,对于给定图像,帽子插图通常是不变的。我们也可以这样说:对于给定的图像,cap insets是特征。所以事情就是这样:如果它们在逻辑上属于图像,为什么我们不将它们与图像一起存储(作为某种元数据),而不是必须在我们得到的任何地方指定它们创建一个新实例?

在日常实践中,这可能会产生严重的好处,主要是通过消除过程中出现人为错误的可能性。如果创建图像的设计者可以在图像文件本身导出时嵌入适当的上限值,那么开发人员将不再需要在代码中编写幻数,并在每次图像更改时保持更新。 resizableImage API可以自动读取和应用上限。哎呀,即使是UIImage上的一个类别也可以。

因此我的问题是:嵌入元数据在图像中是否存在可靠方式?

我想强调这两个词:

  • 可靠:我已经在可选的PNG块上看到了一些条目,但是我担心一旦iOS PNG优化器启动,这些条目就会被删除。或者有没有办法防止这种情况发生。 ? (以及让优化器完成其工作)
  • 嵌入:我已经考虑过将文件名中的元数据包含在与Apple所做的类似的内容中,即“@ 2x”,“~ipad”等,但是有一公里长的名字,比如“image- 20.0-20.0-40.0-20.0@2x.png“似乎没有正确的方法。

任何人都可以为此提出智能解决方案吗?

1 个答案:

答案 0 :(得分:0)

Android有一个名为nine-patch的文件类型,它基本上是构建它的图像和元数据的一部分。也许一个班级可以复制它。 http://developer.android.com/reference/android/graphics/NinePatch.html