Как использовать 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 ничего не говорится.
Ответы
Ответ 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;
}