objective-c - 如何在 UIImageView 中创建大图像?

标签 objective-c image ios4 uiimageview mobile-phones

我目前正在开发一款用于创建明信片的应用程序。但是,我想知道如何在 UITextView(透明背景)中存储图片和框架(我有三个框架,具体取决于分辨率)和一些文本。

我需要保持原始照片分辨率,即使框架或屏幕不允许超过 320 x 480 像素 (2:3) 并插入框架,然后插入文本。我不太关心文本,只要我能在框架内保留图像即可。

我所需要的只是关于如何解决这个问题的建议:我需要框架类,也许还需要方法(函数、消息)的提示,我可以使用这些方法将图像处理为位图或 jpeg 或 png。

不能做:

  • 我的项目经理的想法:将它以天知道哪种格式发送到转换器网页(我记不起 http 地址),天知道如何指示网页合并所有 View ,然后等待它返回到电话并保存。明信片的创建必须在本地完成,以防 Ipad 用户想要创建它们然后将它们保存到 PC 或其他东西中(就个人而言,我想用尽 iPhone 开发框架必须提供的所有资源)。

  • 获取合并所有三个 UIViews 类/子类的当前上下文。非常适合 320 x 480,但不适用于更大的分辨率。


是的,非常感谢您的回答——这就是我的方法。我认为有更好的方法,例如将图像和文本作为位图数据、原始数据或其他方式处理,以更好地保留原始信息。

但我仍然有一个小问题让我有点烦恼:图像(框架内)必须从图像库或相机 Controller 中选择,但是嘿,它给你带来了一个对象(图像大小适合屏幕)和一本字典,它也令人惊讶地带来了原始图像。现在,有两个对象。但是明信片必须以 4 种不同的分辨率生成,并且带来图像的四个“版本”会产生巨大的内存开销。

我怎样才能避免这种情况?我是否应该使用对以下字典元素的引用从内存中提取它们,创建明信片,通过网络发送然后销毁它们?

NSString *const UIImagePickerControllerMediaURL;

NSString *const UIImagePickerControllerReferenceURL; 

在 obj-c 文档中是指向原始信息的对象...我只是想在需要时通过 alloc 和 dealloc 减少开销。

最佳答案

您需要将明信片绘制成新的内存图像。创建新图像的最简单方法是 UIGraphicsBeginImageContext() 函数。然后,您可以使用 UIKit 绘图方法将背景图像、文本等渲染到新图像中,并通过 UIGraphicsGetImageFromCurrentImageContext() 获取生成的图像。根据您的需要,您还可以使用 UIImageJPEGRepresentation() 从生成的图像创建 JPEG/PNG 并将其写入磁盘。

这是一个例子:

UIImage *backgroundImage = [UIImage imageNamed:@"MyPostcardBackground.jpg"];
CGRect frameRect = CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height);
UIGraphicsBeginImageContext(backgroundImage.size);
[backgroundImage drawInRect:frameRect];
NSString *text = @"Caption here...";
[[UIColor whiteColor] set];
[text drawInRect:frameRect withFont:[UIFont boldSystemFontOfSize:35.0] lineBreakMode:UILineBreakModeWordWrap];
//...
UIImage *postcardImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

关于objective-c - 如何在 UIImageView 中创建大图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4607057/

相关文章:

iphone - iOS bundle 子文件夹目录

ios - SWRevealViewController 从 subview 推送

objective-c - 如何防止 UIView 背景旋转?

image - 如何将 JPEG 转换为 EXIF 方向为 1 的 JPEG?

python - 在 Tkinter 中找到相同的图像?

iphone - iOS - 在不使用 UIScrollView 的情况下通过 Quicklook 打开 PDF

iphone - 拍照时移除iPhone 4双闪?

ios - 应用程序从后台返回时黑屏

jQuery : get previous image with prev()

iphone - 如何重构 iPhone 应用程序以在 iPad 上本地运行