加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 06:55:25 所属栏目:百科 来源:网络整理
导读:我目前正在开发一个用于创建明信片的应用程序.但是,我想知道如何存储图片加框架(我有三个帧取决于分辨率)和UITextView(透明背景)中的一些文本. 我需要保持原始照片分辨率,即使帧或屏幕不允许超过320 x 480像素(2:3)并插入帧然后文本.只要我能在帧内保留图像
我目前正在开发一个用于创建明信片的应用程序.但是,我想知道如何存储图片加框架(我有三个帧取决于分辨率)和UITextView(透明背景)中的一些文本.

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

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

无法做到:

>我的项目经理的想法:将它发送到转换器网页(我记不住http地址),上帝知道哪种格式,上帝知道如何指示网页合并所有视图,然后等待它回到手机并保存. POstcard创建必须在本地完成,以防Ipad用户想要创建它们然后将它们保存到PC或其他东西(个人而言,我想耗尽iPhone开发框架提供的所有资源).
>获取合并所有三个UIViews类/子类的当前上下文.非常适合320乘480但不适用于更大的分辨率.

是的,非常感谢您的回答 – 这是我的方法.我认为有一种更好的方法,比如处理图像和文本作为位图数据,原始数据或其他更好的方法来保存原始信息.

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

我怎么能避免这个?我是否应该使用以下字典元素的引用来从内存中创建明信片,通过网络发送它然后销毁它们?

NSString *const UIImagePickerControllerMediaURL;

NSString *const UIImagePickerControllerReferenceURL;

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

解决方法

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

这是一个例子:

UIImage *backgroundImage = [UIImage imageNamed:@"MyPostcardBackground.jpg"];
CGRect frameRect = CGRectMake(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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读