我们试图做的基本想法是我们有一个很大的 UIImage,我们想把它分成几块。该函数的用户可以传入行数和列数,图像将被相应地裁剪(即3行3列将图像切成9块)。问题是,我们在尝试使用 CoreGraphics 完成此操作时遇到了性能问题。我们需要的最大网格是 5x5,操作需要几秒钟才能完成(这对用户来说是滞后时间)。这当然远非最佳。
我和我的同事在这方面花了很长时间,并在网上搜索了答案,但没有成功。我们俩都没有在 Core Graphics 方面非常有经验,所以我希望代码中有一些愚蠢的错误可以解决我们的问题。SO用户,请帮助我们解决这个问题!
我们使用http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/上的教程来修改我们的代码。
下面的函数:
-(void) getImagesFromImage:(UIImage*)image withRow:(NSInteger)rows withColumn:(NSInteger)columns
{
CGSize imageSize = image.size;
CGFloat xPos = 0.0;
CGFloat yPos = 0.0;
CGFloat width = imageSize.width / columns;
CGFloat height = imageSize.height / rows;
int imageCounter = 0;
//create a context to do our clipping in
UIGraphicsBeginImageContext(CGSizeMake(width, height));
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGRect clippedRect = CGRectMake(0, 0, width, height);
CGContextClipToRect(currentContext, clippedRect);
for(int i = 0; i < rows; i++)
{
xPos = 0.0;
for(int j = 0; j < columns; j++)
{
//create a rect with the size we want to crop the image to
//the X and Y here are zero so we start at the beginning of our
//newly created context
CGRect rect = CGRectMake(xPos, yPos, width, height);
//create a rect equivalent to the full size of the image
//offset the rect by the X and Y we want to start the crop
//from in order to cut off anything before them
CGRect drawRect = CGRectMake(rect.origin.x * -1,
rect.origin.y * -1,
image.size.width,
image.size.height);
//draw the image to our clipped context using our offset rect
CGContextDrawImage(currentContext, drawRect, image.CGImage);
//pull the image from our cropped context
UIImage* croppedImg = UIGraphicsGetImageFromCurrentImageContext();
//PuzzlePiece is a UIView subclass
PuzzlePiece* newPP = [[PuzzlePiece alloc] initWithImageAndFrameAndID:croppedImg :rect :imageCounter];
[slicedImages addObject:newPP];
imageCounter++;
xPos += (width);
}
yPos += (height);
}
//pop the context to get back to the default
UIGraphicsEndImageContext();
}
任何建议都非常感谢!