objective c - CGImage de UIImage return NULL
objective-c ios (4)
Lo que hizo ahora es simplemente crear piezas con 0.f de ancho , debe usar dos for
s para definir el width
y height
de sus piezas. Ejemplo de código como este (aún no probado, pero debería funcionar):
for (int height = 0; height < image.size.height; height += piecesSize) {
for (int width = 0; width < image.size.width; width += piecesSize) {
CGRect subFrame = CGRectMake(width, height, piecesSize, piecesSize);
CGImageRef newImage = CGImageCreateWithImageInRect(image.CGImage, subFrame);
UIImage * finalImage = [UIImage imageWithCGImage:newImage];
CGImageRelease(newImage);
[tempArray addObject:finalImage];
}
}
Creé una función para dividir una imagen en varias imágenes, pero cuando tomo el CGImage del UIImage, el CGImage devuelve NULL
NSArray* splitImage(UIImage* image,NSUInteger pieces) {
NSLog(@"width: %f, %zu",image.size.width,CGImageGetWidth(image.CGImage));
NSLog(@"%@",image.CGImage);
returns NULL
NSMutableArray* tempArray = [[NSMutableArray alloc]initWithCapacity:pieces];
CGFloat piecesSize = image.size.height/pieces;
for (NSUInteger i = 0; i < pieces; i++) {
// take in account retina displays
CGRect subFrame = CGRectMake(0,i * piecesSize * image.scale ,image.size.width * image.scale,piecesSize * image.scale);
CGImageRef newImage = CGImageCreateWithImageInRect(image.CGImage,subFrame);
UIImage* finalImage =[UIImage imageWithCGImage:newImage];
CGImageRelease(newImage);
[tempArray addObject:finalImage];
}
NSArray* finalArray = [NSArray arrayWithArray:tempArray];
[tempArray release];
return finalArray;
}
La propiedad CGImage devolverá nil si el UIImage se creó a partir de otra imagen, como IOSurface o CIImage. Para evitar esto en este caso particular, puedo crear una CGImage desde una IOSurface usando la función c y luego convertir eso en un UIImage.
UICreateCGImageFromIOSurface(IOSurfaceRef surface);
Ocurre en algunos casos cuando tratamos de recortar la imagen. Encontré la solución así. Prueba esto, puede ser que esto te pueda ayudar:
NSData *imageData = UIImageJPEGRepresentation(yourImage, 0.9);
newImage = [UIImage imageWithData:imageData];
He creado UIImage
de CGImage
.
CIImage *ciImage = image.CIImage;
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef ref = [context createCGImage:ciImage fromRect:ciImage.extent];
UIImage *newImage = [UIImage imageWithCGImage:ref];
Y ahora newImage.CGImage
no es nada