【发布时间】:2023-03-09 17:13:01
【问题描述】:
我创建了一个将图像分割成多个图像的函数,但是当我取 UIImage 的 CGImage 时,CGImage 返回 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;
}
【问题讨论】:
-
最后检查 tempArray 是否为空
-
CGImage 不是一个对象,它是一个 C 结构体,所以你不应该使用带有 %@ 的 NSLog。
-
问题是我用 IOSurface 创建了 UIImage :D
-
如果你想问一个不同的问题,请创建一个新的,这里没有编辑.. :)
-
@lnafziger:该结构是一个实现细节,其成员在 Core Graphics 之外不可见。 CGImages 是 Core Foundation 对象,文档明确指出
%@可用于 Objective-C 对象和 Core Foundation 对象。 developer.apple.com/library/ios/documentation/Cocoa/Conceptual/…developer.apple.com/library/ios/documentation/CoreFoundation/…
标签: objective-c ios uiimage cgimage