通过编码切片图像

时间:2011-12-14 18:09:46

标签: ios uiimage slice

我看到一些类似拼图的应用程序。它首先要求选择一个图像,然后将它们切片并随机放入4x4或5x5正方形。一个正方形将为空,用户可以通过将图像滑动到空插槽来重新排列它们。

我知道如何滑动图像。但主要任务是如何将它们变成更小的图像? 有可能吗?

2 个答案:

答案 0 :(得分:0)

Matt Long在他的文章Subduing CATiledLayer中对此进行了讨论。

答案 1 :(得分:0)

不确定这是否是最有效的方法,但我认为它应该有效。

将图像加载到希望切片大小的UIImageView中,因此我们以480x320图像为例。让我们把它切成9个部分,一个3x3网格。这将使每件160x106(粗略地,320不均匀地除以3)

因此,创建尺寸为160x106的UIImageView,将image属性设置为您的完整尺寸图像。并将图片视图的contentMode设置为UIViewContentModeScaleAspectFill,以便剪切不在视图中的区域。我没有尝试过,但我认为这会给你网格的左上角,位置1,1。

现在,您可以根据内存效率/性能做出选择,您必须测试哪种方式最佳。

选项1

继续为每个切片执行此操作,但设置UIImage的框架,以便显示图像的正确部分,并剪切其余部分。因此,对于位置2,2,您的第1,2位的框架看起来像CGRectMake(106, 0, 106, 160),它将是CGRectMake(106*2, 160, 106, 160),依此类推。

这导致整个图像被加载到内存中9次,这可能是也可能不是问题。您将不得不对内存使用情况进行一些分析。

选项2

在UIImageView中创建“切片”后,将该上下文保存为文件,稍后将加载到相应的UIImageViews中。

以下代码演示了将UIView的上下文保存到UIImage的一种方法。

UIGraphicsBeginImageContext(yourView.frame.size);
[[yourView layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage *imageOfView = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

然后,您可以使用适当的名称将此UIImage保存到磁盘,以便稍后加载到相应的切片中。