Подтвердить что ты не робот

Как использовать CGImageCreateWithImageInRect для iPhone 4 (HD)?

Я использую следующий код для получения изображений из спрайта. И он отлично работает везде, кроме iPhone 4 (версия HD).

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

iPhone 4 автоматически загружает HD-версию изображения ([email protected]) вместо sprite.png. Исходное изображение имеет шкалу 2, но результирующее изображение имеет масштаб 1 и неправильный размер.

Как справиться с этим поведением с учетом разных масштабов для iPhone 3G [s] и iPhone 4?

Я прочитал этот document, но об использовании CGImageCreateWithImageInRect ничего не говорится.

4b9b3361

Ответ 1

Из того, что я могу сказать, 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, которая выглядит так, как будто)

Ответ 2

Вы должны умножить обрезку по шкале изображения. По моему опыту, нет необходимости использовать любую иную инициализацию изображений.

- (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;
}