19

我使用以下代码从精灵中获取图像。除了 iPhone 4(高清版)外,它在任何地方都可以正常工作。

- (UIImage *)croppedImage:(CGRect)rect {
    CGImageRef image = CGImageCreateWithImageInRect([self CGImage], rect);
    UIImage *result = [UIImage imageWithCGImage:image];
    CGImageRelease(image);
    return result;
}

iPhone 4 会自动加载高清版本的图像 (sprite@2x.png) 而不是 sprite.png。原始图像的比例为 2,但生成的图像的比例为 1,尺寸错误。

考虑到 iPhone 3G[s] 和 iPhone 4 的不同规模,如何处理这种行为?

我已经阅读了这个文档,但是关于这里的使用CGImageCreateWithImageInRect什么也没说。

4

2 回答 2

32

据我所知,CGImageCreateWithImageInRect 会做正确的事。你需要改变的是 UIImage 初始化

http://developer.apple.com/iphone/library/documentation/uikit/reference/UIImage_Class/Reference/Reference.html#//apple_ref/occ/clm/UIImage/imageWithCGImage:scale:orientation

将其更改为[UIImage imageWithCGImage:image scale:self.scale orientation:self. imageOrientation],它应该可以正常工作。(这是假设这是 UIImage 上的一个类别,看起来就是这样)

于 2010-07-03T03:07:51.823 回答
14

您应该将裁剪矩形乘以图像比例。根据我的经验,没有必要使用任何不同的图像初始化。

- (UIImage *)_cropImage:(UIImage *)image withRect:(CGRect)cropRect
{
    cropRect = CGRectMake(cropRect.origin.x * image.scale,
                          cropRect.origin.y * image.scale,
                          cropRect.size.width * image.scale,
                          cropRect.size.height * image.scale);

    CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropRect);

    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];

    CGImageRelease(imageRef);

    return croppedImage;
}
于 2013-07-28T18:49:04.343 回答