2012-03-18 38 views
1

我將相互添加2個圖像,並想知道這是否是一種很好的方法?此代碼有效並且看起來很強大。將2個UIImage添加到一個UIImage中

所以,我的問題確實是這樣,還是有更好的辦法?

PS:警告代碼由設計人員編寫。

調用該函數:

- (IBAction) { 
    UIImage *MyFirstImage = UIImage imageNamed: @"Image.png"]; 
    UIImage *MyTopImage = UIImage imageNamed: @"Image2.png"]; 
    CGFloat yFloat = 50; 
    CGFloat xFloat = 50; 
    UIImage *newImage = [self placeImageOnImage:MyFirstImage imageOver:MyTopImage x:&xFloat y:&yFloat]; 
} 

的功能:

- (UIImage*) placeImageOnImage:(UIImage *)image topImage:(UIImage *)topImage x:(CGFloat *)x y:(CGFloat *)y {  
    // if you want the image to be added next to the image make this CGSize bigger. 
    CGSize newSize = CGSizeMake(image.size.width,image.size.height); 

    UIGraphicsBeginImageContext(newSize); 
    [topImage drawInRect:CGRectMake(*x,*y,topImage.size.width,topImage.size.height)]; 
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height) blendMode:kCGBlendModeDestinationOver alpha:1]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 
+0

難道真的不能改進! – tipycalFlow 2012-03-18 15:37:11

回答

0

看起來OK。也許你並不需要CGFloat指針,但這也很好。

0

主要想法是正確的。沒有更好的方法去做你想做的事。

缺陷:
1)考慮UIGraphicsBeginImageContextWithOptions方法。 UIGraphicsBeginImageContext對視網膜不好。
2)不要將浮點數作爲指針。使用x:(CGFloat)x y:(CGFloat)y instead

+0

謝謝我會嘗試 – Kunadiso 2012-03-18 16:28:24

0

您應該使用開始上下文版本UIGraphicsBeginImageContextWithOptions,允許您指定縮放選項(並將0作爲縮放比例),而不會在視網膜顯示上失去任何質量。

+0

我會研究UIGraphicsBeginImageContextWithOptions並重新發布代碼。謝謝! – Kunadiso 2012-03-18 16:29:20

0

如果你想要在另一幅圖像上繪製一幅圖像,只需在後面繪製一幅圖像,然後在前面繪製一幅圖像,就像使用繪畫一樣。沒有必要使用混合模式。

[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
[topImage drawInRect:CGRectMake(*x,*y,topImage.size.width,topImage.size.height)];