2011-08-21 75 views
6

我對iPhone應用程序工作在那裏我有合併三個圖像,使它們單個圖像。我的意思是說我有一個背景圖像,一個標題圖像和較低的圖像,我需要結合所有這些才能製作單個圖像,以便我可以使用它發佈到Facebook。謝謝。Iphonesdk合併三個圖像的兩個單個圖像

* 編輯 * 我知道兩個圖像此代碼,但我怎麼可以使用它的三幅影像:

UIGraphicsBeginImageContext(saveView.bounds.size); 
[saveView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+1

檢查了這一點 - http://stackoverflow.com/questions/5299452/how-can-i-crop-an-image-with-mask-and-combine-it-with-another-image-background –

+0

它是基於opengl的。我會pref是任何其他的選擇。 –

+0

我貼你將工作作爲手機可以在內存中處理多達圖像的代碼 - 見我與擴展代碼 – shein

回答

10

你可以只在一個單一的UIView排列在一起(我想即使關屏,但我還沒有選中) - 然後只用QuartzCode說的UIView轉換爲一個UIImage:

UIGraphicsBeginImageContext(myView.bounds.size); 
[myView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

然後把它轉換成一種格式 - 像PNG在立場:

NSData *imageData = UIImagePNGRepresentation(image); 

然後發送不應該太難。

編輯 這裏是一個擴展的例子,你還可以看到3張圖片 - 當然,你可以使用Interface Builder與出路,而不是寫這一切的 - 但你可以複製粘貼此嘗試:

UIImageView *imgView1, *imgView2, *imgView3; 
imgView1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1"]]; 
imgView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image2"]]; 
imgView3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image3"]]; 

imgView1.frame = CGRectMake(0, 0, 50, 50); 
imgView2.frame = CGRectMake(50, 50, 100, 100); 
imgView3.frame = CGRectMake(100, 100, 200, 200); 

[referenceView addSubview:imgView1]; 
[referenceView addSubview:imgView2]; 
[referenceView addSubview:imgView3]; 

UIGraphicsBeginImageContext(referenceView.bounds.size); 
[referenceView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

resultView = [[UIImageView alloc] initWithImage:finalImage]; 
resultView.frame = CGRectMake(0, 0, 320, 480); 
[self.view addSubview:resultView]; 

referenceView.hidden = YES; 

注意 我已經檢查過,當你調用renderInContext的時候UIView必須是可繪製/可見的(它可以不在屏幕上,但它不能被隱藏或者alpha = 0,因爲那樣它將被渲染爲不可見)。因此,要麼把它關閉屏幕或立即繪製

+0

更新的答案,我發現我沒有給referenceView添加到主視圖渲染。但是,我確實遇到了使用我的初始代碼渲染上下文的問題,但在更改後,我的答案似乎可以正常工作。 – Christopher

2

幸的回答後隱藏它幫助我,但我發現我沒有到的UIView添加到主視圖,以呈現它。這裏是添加文字到圖像的例子...

UIImage *image = [UIImage imageNamed:@"toolbar_icon"]; // image is 20 x 20 .png 

    UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)]; 
    [tempView addSubview:[[UIImageView alloc] initWithImage:image]]; 

    UILabel *label = [[UILabel alloc] initWithFrame:tempView.frame]; 
    [label setText:[NSString stringWithFormat:@"%d", [self countValue]]]; 
    [label setFont:[UIFont systemFontOfSize:22.0]]; 
    [label setTextColor:[UIColor lightTextColor]]; 
    [label setTextAlignment:UITextAlignmentCenter]; 
    [label setBackgroundColor:[UIColor clearColor]]; 
    [tempView addSubview:label]; 

    UIGraphicsBeginImageContext(tempView.bounds.size); 
    [tempView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    UIBarButtonItem *countItem = [[UIBarButtonItem alloc] initWithImage:finalImage 
                     style:UIBarButtonItemStyleBordered 
                     target:self 
                     action:@selector(countAction:)]; 

注:我突然意識到我的回答包括添加標籤,這正是我試圖找到在此之前做的圖像。參考Combine Label Text With Image