¿Cómo usar CGImageCreateWithImageInRect para iPhone 4(HD)?
core-graphics iphone-4 (2)
Utilizo el siguiente código para obtener imágenes del sprite. Y funciona bien en todas partes, excepto en el iPhone 4 (versión HD).
- (UIImage *)croppedImage:(CGRect)rect {
CGImageRef image = CGImageCreateWithImageInRect([self CGImage], rect);
UIImage *result = [UIImage imageWithCGImage:image];
CGImageRelease(image);
return result;
}
El iPhone 4 carga automáticamente la versión HD de la imagen ([email protected]) en lugar de sprite.png. La imagen original tiene una escala 2, pero la imagen resultante tiene una escala 1 y un tamaño incorrecto.
¿Cómo manejar este comportamiento teniendo en cuenta las diferentes escalas para iPhone 3G [s] y iPhone 4?
He leído este document , pero sobre el uso CGImageCreateWithImageInRect aquí no dice nada.
Debes multiplicar el recorte recto por la escala de la imagen. Desde mi experiencia, es innecesario usar cualquier iniciación de imagen diferente.
- (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;
}
Por lo que puedo decir, CGImageCreateWithImageInRect hará lo correcto. Lo que necesitas cambiar es la iniciación de UIImage
http://developer.apple.com/iphone/library/documentation/uikit/reference/UIImage_Class/Reference/Reference.html#//apple_ref/occ/clm/UIImage/imageWithCGImage:scale:orientation : 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]
a [UIImage imageWithCGImage:image scale:self.scale orientation:self. imageOrientation]
[UIImage imageWithCGImage:image scale:self.scale orientation:self. imageOrientation]
y debería funcionar bien. (Esto es asumiendo que esta es una categoría en UIImage que parece que es)