我试图让用户平移/缩放静态图像,主图像上有一个选择矩形,“放大”图像有一个单独的 UIView。
“放大”的 UIView 实现了 drawRect:
// rotate selectionRect if image isn't portrait internally
CGRect tmpRect = selectionRect;
if ((image.imageOrientation == UIImageOrientationLeft || image.imageOrientation == UIImageOrientationLeftMirrored || image.imageOrientation == UIImageOrientationRight || image.imageOrientation == UIImageOrientationRightMirrored)) {
tmpRect = CGRectMake(selectionRect.origin.y,image.size.width - selectionRect.origin.x - selectionRect.size.width,selectionRect.size.height,selectionRect.size.width);
}
// crop and draw
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], tmpRect);
[[UIImage imageWithCGImage:imageRef scale:image.scale orientation:image.imageOrientation] drawInRect:rect];
CGImageRelease(imageRef);
这方面的表现很糟糕。它在 [UIImage drawInRect] 上花费了 92% 的时间。
更深一点,在 ripc_AcquireImage 中为 84.5%,在 ripc_RenderImage 中为 7.5%。
ripc_AcquireImage 是 51% 的 jpg 解码,30% 的上采样。
所以......我想我的问题是避免这种情况的最佳方法是什么?一种选择是不以 jpg 开头,这是解决某些问题的真正解决方案 [ala captureStillImageAsynchronouslyFromConnection without JPG intermediary ]。但是,如果我从相机胶卷上得到一个 UIImage,比如说......有没有一种干净的方法来转换 UIImage-jpg?是否将其转换为正确的事情(本质上是否有一个“cacheAsBitmap”标志可以做到这一点?)