2011-05-08 54 views
2

同胞開發商和我正在創建是創建一個合成圖像的iPhone應用程序。這個想法是在一個6x6網格中有36個圖像。每張原始圖片都是400x300px。因此,處理後的最終圖像應該是2400x1800像素。的iOS:添加的6x6 400x300px圖像一個合成圖像

免責聲明:我不這樣做我自己特別節目。我的同事程序員不在SO上,出於各種原因,我不得不要求他。我個人是.Net開發人員,所以如果明顯的話,請原諒我的問題。

現在,顯然這是創建內存問題。到目前爲止,他的解決方案是嘗試將構圖繪製到UIImageView或CATiledLayer,並通過截取視圖來保存構圖。到目前爲止,所有的嘗試都由於內存問題而使應用程序崩潰,或者在構圖中產生黑色區域。

我的問題大概是簡單的。我們如何創建一個大的(屏幕外?)圖像,繪製36個部分圖像此結構,保存成分,然後把它放在可以由用戶來查看適當的組成部分?

編輯:

我的哥們找到了解決自己到底。我會在這裏一起接受的答案,以便將它張貼到有助於SO維基:)

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); 

回答

1

明顯的機制將是一個UIScrollView。這是一個對象,意在顯示一個比屏幕更大的圖像或一組圖像,並且它具有易於實現的縮放和滾動功能。

你會在Apple's Scroll View's Programming Guide to iOS找到一個很好的入門。

你只需要

  1. 創建一個新的滾動視圖
  2. 設置其contentSize屬性要顯示
  3. 添加無論是一個大的圖像作爲特大型圖像的總大小子視圖或添加所有小圖像,將它們適當地放在一起

如果您想製作一個大圖像,您可以創建一個大的圖像ustom視圖的尺寸與滾動視圖的尺寸相同contentSize。然後,將每個小圖像繪製在它自己的網格中。最後,將這個大的自定義視圖添加爲滾動視圖的子視圖。

這是一個顯而易見的解決方案,但它可能會做你想要的一切,併爲你提供一些額外的功能。

編輯:滾動視圖可能是一個很好的起點,但您仍可能遇到內存限制。尋找使滾動視圖更高效的答案可能會有所幫助。你可能在這個相關的問題中找到一些好主意:ScrollView runs out of memory when it gets too big

編輯2:上述指南中詳細介紹了管理內存的方法,代碼和所有內容。在平鋪上看看ScrollViewSuite演示的第三個示例。這應該適合你,因爲你的圖像已經由瓷磚組成。

的想法是做一個排序表視圖中指出,目前回收的圖像片,而不是細胞的滾動視圖。滾動視圖是子類,一組可重用的圖塊保留爲其實例變量之一。實現的關鍵是在layoutSubviews中從超級視圖中移除已移出可見區域的圖塊,然後爲新顯示的內容回收圖塊並將其添加爲子視圖。通過這種方式,只有可見的圖塊被加載到內存中。

希望這對你有用。

+0

謝謝!我會把這個發給我的好友,看他有沒有任何意見。現在我會+1你:​​) – Pedery 2011-05-08 11:45:17

+0

請注意我的編輯。這可能是一個很好的起點,但不是完整的解決方案。 – 2011-05-08 11:56:23

+0

啊,也許這是他已經嘗試過的,並且失敗了。我知道他在這方面工作了好幾個小時,但沒有得到解決方案。因此,我在上面描述。他目前在紐約,所以我們不得不等待太陽出現在他的時區以獲得答案。 – Pedery 2011-05-08 12:41:25

相關問題