gpt4 book ai didi

iphone - iOS:将 6x6 400x300px 图像添加到一张合成图像

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:56:58 25 4
gpt4 key购买 nike

我和我的开发伙伴正在创建一个 iPhone 应用程序来创建合成图像。这个想法是在 6x6 网格中有 36 张图像。每张原始图像为 400x300 像素。因此,处理后的最终图像应为 2400x1800px。

免责声明:我并不是专门为自己编写此程序。我的同事程序员不在 SO 上,出于各种原因我不得不找他。我个人是一名 .Net 开发人员,如果我的问题很明显,请原谅我。

现在,显然这会造成内存问题。到目前为止,他的解决方案是尝试将合成绘制到 UIImageView 或 CATiledLayer,并通过截取 View 的屏幕截图来保存合成。到目前为止,所有尝试要么由于内存问题导致应用程序崩溃,要么在合成中产生黑色区域。

我的问题大概很简单。我们如何创建一个大的(屏幕外?)图像,将 36 个部分图像绘制到这个合成中,保存合成,然后将其放入用户可以查看的适当组件中?

编辑:

我哥们最后自己找到了解决办法。我会将它与接受的答案一起发布在这里,以便为 SO wiki 做出贡献:)

UIGraphicsBeginImageContext(svPreview.contentSize);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(ctx, [[UIColor blackColor] CGColor]);
CGContextFillRect(ctx, CGRectMake(0, 0, svPreview.contentSize.width, svPreview.contentSize.height));

for(UIImageView *subview in [svPreview subviews]) {
[subview.image drawAtPoint:subview.frame.origin];
}

UIImage *rawImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImageWriteToSavedPhotosAlbum(rawImage, self, nil, nil);

最佳答案

显而易见的机制是 UIScrollView。它是一个用于显示比屏幕大的图像或一组图像的对象,并且具有易于实现的缩放和滚动功能。

您会在 Apple's Scroll View's Programming Guide to iOS 中找到一本很好的入门书.

你只需要

  1. 创建一个新的 ScrollView
  2. 将其 contentSize 属性设置为您要显示的超大图像的总大小
  3. 添加一个大图像作为 subview ,或者添加所有小图像,将它们适本地放置在一起

如果您想制作一个大图像,您可以创建一个与 ScrollView 的 contentSize 大小相同的大型自定义 View 。然后,在自己的网格中绘制每个小图像。最后,将这个大的自定义 View 添加为 ScrollView 的 subview 。

这是显而易见的解决方案,但它可能会满足您的所有需求,并为您提供一些额外的功能。

编辑: ScrollView 可能是一个很好的起点,但您仍然可能会遇到内存限制。搜索有关使 ScrollView 更高效的答案可能会有所帮助。您可能会在这个相关问题中找到一些好主意:ScrollView runs out of memory when it gets too big

编辑 2: 管理内存的方法在上述指南中有详细的代码和所有内容。看看 ScrollViewSuite演示的第三个示例,关于平铺。这应该非常适合您,因为您的图像已经由图 block 组成。

想法是从 ScrollView 中创建一种表格 View ,现在回收图像 block 而不是单元格。 ScrollView 被子类化,一组可重用的图 block 被保留为它的一个实例变量。实现的关键是,在 layoutSubviews 中,将已经移出可见区域的 tile 从 superview 中移除,然后回收新可见内容的 tile 并将它们添加为 subview 。这样,只有可见的图 block 才会加载到内存中。

希望这对你有用。

关于iphone - iOS:将 6x6 400x300px 图像添加到一张合成图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5926976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com