将2个UIImages添加到一个UIImage中

时间:2012-03-18 15:27:33

标签: iphone objective-c ios image sdk

我正在互相添加2张图片,想知道这是否是一个很好的方法呢?此代码有效并且看起来很强大。

所以,我的问题是,这很好还是有更好的方法?

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

4 个答案:

答案 0 :(得分:0)

看起来不错。也许你真的不需要CGFloat指针,但那也没关系。

答案 1 :(得分:0)

主要观点是正确的。没有更好的方法来做你想做的事。

劣势:
1)考虑UIGraphicsBeginImageContextWithOptions方法。 UIGraphicsBeginImageContext对视网膜没有好处。
2)不要将花车作为指针传递。使用x:(CGFloat)x y:(CGFloat)y instead

答案 2 :(得分:0)

您应该使用开始上下文版本UIGraphicsBeginImageContextWithOptions,它允许您指定缩放选项(并将0作为比例),您不会在视网膜显示上失去任何质量。

答案 3 :(得分:0)

如果你想在另一幅图像上绘制一幅图像,只需在后面绘制一幅图像,然后在前面绘制一幅图像,就像使用油漆一样。无需使用混合模式。

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