2011-06-20 29 views
0

基本上,我製作的應用程序涉及用戶拍攝照片,或者選擇已在設備上的照片,然後在圖像上放置覆蓋圖。iPhone SDK:在另一個圖像上保存一個圖像的問題

因此,除了一件事情之外,我似乎已經編碼好所有東西,在用戶選擇覆蓋並定位之後,保存時覆蓋層的大小發生了變化,而x和y值似乎是正確的。

所以這是我用來添加疊加(「圖像」作爲用戶照片)代碼:

​​

這是用來保存生成的圖像的代碼:

UIGraphicsBeginImageContext(image.image.size); 

// Draw the users photo 
[image.image drawInRect:CGRectMake(0, 0, image.image.size.width, image.image.size.height)]; 

// Draw the overlay 
float xx = (overlay.center.x); 
float yy = (overlay.center.y); 

CGRect aaFrame = overlay.frame; 
float width = aaFrame.size.width; 
float height = aaFrame.size.height; 


[overlay.image drawInRect:CGRectMake(xx, yy, width, height)]; 
    UIGraphicsEndImageContext(); 

有什麼幫助嗎?謝謝

回答

2

問題是,您正在使用圖像的大小,而不是圖像視圖的幀大小。圖片似乎比圖片視圖大得多,因此當您使用圖片大小時,其他圖片的大小最終會比較小,但它仍然是正確的大小。您可以通過修改段將 -

UIGraphicsBeginImageContext(image.frame.size); 

// Draw the users photo 
[image.image drawInRect:CGRectMake(0, 0, image.frame.size.width, image.frame.size.height)]; 
[overlay.image drawInRect:overlay.frame]; 

UIImage * resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

避免質量

的損失,而上述方法會導致分辨率的損失,企圖拉攏父圖像在其適當的分辨率可能有不必要的影響就其子女形象而言,即如果覆蓋層本身不具有高分辨率,那麼它可以結束有彈性。不過你可以試試這個代碼,以繪製在父圖像的分辨率(未經測試,讓我知道,如果你的問題) -

float verticalScale = image.image.size.height/image.frame.size.height; 
float horizontalScale = image.image.size.width/image.frame.size.width; 

CGRect overlayFrame = overlay.frame; 
overlayFrame.origin.x *= horizontalScale; 
overlayFrame.origin.y *= verticalScale; 
overlayFrame.size.width *= horizontalScale; 
overlayFrame.size.height *= verticalScale; 

UIGraphicsBeginImageContext(image.image.size); 

// Draw the users photo 
[image.image drawInRect:CGRectMake(0, 0, image.image.size.width, image.image.size.height)]; 
[overlay.image drawInRect:overlayFrame]; 

UIImage * resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 
+0

謝謝,這個作品真的很好,但它是一個關於質量的損失恥辱。我爲.image方法而不是.frame進行研究的原因之一是它會保持圖像的真實分辨率。是否有另一種方式來添加覆蓋作爲子視圖,但它代表其在子視圖中的真實大小? – Sam

+0

@Jessica,我已經添加了適合您需求的代碼。它未經測試。你能檢查它是否有效嗎? –

+0

對不起,延遲,我剛剛測試它,它非常有效,非常感謝您的幫助! – Sam

相關問題