通过选择另一个UIImage的一部分进行UIImage

时间:2011-12-16 18:03:59

标签: ios objective-c uiimage mask

我有一个UIImage和一个CGPoint,告诉我应该在哪个方向移动它来创建另一个图像。背景可以是任何东西。

给出最初的UIImage如何创建新的UIImage?最有效的方法是什么?

以下是我正在做的事情:

int originalWidth = image.size.width;
int originalHeight = image.size.height;
float xDifference = [[coords objectAtIndex:0] floatValue];
float yDifference = [[coords objectAtIndex:1] floatValue];  


UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(0, 240, originalWidth, originalHeight)];

UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.contentMode = UIViewContentModeTopLeft;

CGRect imageFrame = imageView.frame;
imageFrame.origin.x = xDifference;
imageFrame.origin.y = -yDifference;
imageView.frame = imageFrame;

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

是否有更优化的版本?

1 个答案:

答案 0 :(得分:8)

您可以使用 CGImageCreateWithImageInRect() 。您可以使用 property of the same name CGImage获得UIImage

基本上您最终要做的是将遮罩应用于现有图像以提取您需要的部分。像这样 -

enter image description here

myImageArea = CGRectMake(xOrigin, yOrigin, myWidth, myHeight);//newImage
mySubimage  = CGImageCreateWithImageInRect(oldImage, myImageArea);
myRect      = CGRectMake(0, 0, myWidth*2, myHeight*2);
CGContextDrawImage(context, myRect, mySubimage);

This post很好地了解了如何使用此属性。