2011-01-05 83 views
4

我目前正在開發一個應用程序來創建明信片。但是,我想知道如何存儲圖片加框架(我有三個幀取決於分辨率)和一些文字在UITextView(透明背景)。如何在UIImageView中創建大圖像?

即使幀或屏幕不允許超過320 x 480像素(2:3)並插入幀然後文本,我仍需保留原始照片分辨率。只要我可以在框架內保留圖像,我就不關心文字。

我需要的是關於如何解決這個問題的建議:我需要框架類,也許提示方法(函數,消息),我可以使用它來將圖像作爲位圖或jpeg或png工作。

不能做:

  • 我的項目經理的想法:將其發送到一個轉換器的網頁(我不記得HTTP地址),神知道哪種格式和上帝知道如何指示網頁合併所有意見然後等待它回到電話並保存。創建POstcard必須在本地完成,以防Ipad用戶想要創建它們,然後將它們保存到PC或其他內容(我個人希望耗盡iPhone開發框架中提供的所有資源)。

  • 獲取合併所有三個UIView類/子類的當前上下文。非常適合320×480,但不適合更大的分辨率。


呀,非常感謝您的answer--這是我的做法。我認爲有更好的方法來處理圖像和文本作爲位圖數據,原始數據或其他內容來更好地保留原始信息。

但是我仍然有一個小問題讓我有些迷惑:必須從圖像庫或相機控制器中選擇圖像(幀內),但是,嘿,它會爲您帶來一個對象(圖像大小爲適合屏幕)和一個令人驚訝地帶來原始圖像的字典。現在,有兩個對象。但明信片必須以4種不同的分辨率生成,並且帶來圖像的四個「版本」會產生巨大的內存開銷。

我該如何避免這種情況?我是否應該使用對以下字典元素的引用來將它們從內存中引出,創建明信片,通過網絡發送並將它們銷燬?

NSString *const UIImagePickerControllerMediaURL; 

NSString *const UIImagePickerControllerReferenceURL; 

obj-c doc是指向原始信息的對象......我只是想在需要時減少alloc和dealloc的開銷。

回答

1

您需要將明信片繪製到新的內存中圖像中。創建新圖像的最簡單方法是UIGraphicsBeginImageContext()函數。然後,您可以使用UIKit繪圖方法將背景圖像,文本等渲染到新圖像中,並通過UIGraphicsGetImageFromCurrentImageContext()獲得生成的圖像。根據您的需要,您還可以使用生成的圖像創建一個JPEG/PNG並將其寫入磁盤,使用UIImageJPEGRepresentation()

下面是一個例子:

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(); 
+0

呀,非常感謝您的回答----這是我的做法(我想有像處理圖像的第二文本作爲位圖數據或者更好的辦法還有些東西可以更好地保存原始信息),但是我仍然有一個小問題,這讓我感到有些不適。 – 2011-01-18 14:30:25

+1

你一直很有幫助......真的。我真的很高興仍然有善良的人在需要時提供幫助。在http://www.iphonedevsdk.com/論壇上,當我看到更復雜的問題被解決時,我想爲我解決這個問題,比如50美元。 – 2011-01-18 14:49:15

相關問題