将可伸缩的UIImage与“正常”UIImage合并

时间:2011-02-10 10:31:18

标签: iphone objective-c uiimage

我想结合两个UIImages,一个可伸缩和一个“正常”。问题在于,如果我使用UIGraphicsImageContext合并图像,则第二个图像也会被拉伸(它应该是第一个图像,但它应该是拉伸的)。有人知道如何避免这种情况吗?

非常感谢!

来自我的ViewController的调用:

UIImage *stretchImage = [[UIImage imageNamed:@"stretchableLeft.png"]   stretchableImageWithLeftCapWidth:0.0 topCapHeight:16.0];
    stretchImage = [self imageWithImage:stretchImage scaledToSize:CGSizeMake(64.0, 64.0)];
    stretchImage = [self mergeImageWithImage:stretchImage secondImage:[UIImage imageNamed:@"topImage.png"]]; // only 40x40 Px

这两种方法是:

- (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize  
{
UIGraphicsBeginImageContext( newSize );
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return newImage;


- (UIImage*)mergeImageWithImage:(UIImage *)image secondImage:(UIImage *)image2 
{
UIGraphicsBeginImageContext(image.size);
[image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];
[image2 drawInRect:CGRectMake(10,10,image.size.width,image.size.height) blendMode:kCGBlendModeNormal alpha:1.0];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return newImage;
}

1 个答案:

答案 0 :(得分:1)

我认为问题在于你要求两个图像都在整个矩形中绘制。这导致你的第二张图像延长。

合并图像时,请尝试将image2.size用于image2。绘制矩形时,您必须使用x / y坐标调整位置。

- (UIImage*)mergeImageWithImage:(UIImage *)image secondImage:(UIImage *)image2 
{
UIGraphicsBeginImageContext(image.size);
[image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];
[image2 drawInRect:CGRectMake(10,10,image2.size.width,image2.size.height) blendMode:kCGBlendModeNormal alpha:1.0];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return newImage;
}