【发布时间】:2014-09-13 21:47:25
【问题描述】:
如何在没有 UIImage 的情况下创建新的 CGImageRef?我不能使用image.CGImage
我正在从服务器进程接收 base64 编码图像作为 std::string。下面代码的第一部分模拟接收编码的字符串。
- (UIImage *)testChangeImageToBase64String
{
UIImage *processedImage = [UIImage imageNamed:@"myFile.jpg"];
// UIImage to unsigned char *
CGImageRef imageRef = processedImage.CGImage;
NSData *data = (NSData *) CFBridgingRelease(CGDataProviderCopyData(CGImageGetDataProvider(imageRef)));
// encode data to Base64 NSString
NSString *base64EncodedDataString = [data base64EncodedStringWithOptions:0];
// create encoded std::string
std::string encoded([base64EncodedDataString UTF8String]);
// ***************************************************************************
// This is where we call the server method and receive the bytes in a std::string
std::string received = encoded;
// ***************************************************************************
// get Base64 encoded std::string into NSString
NSString *base64EncodedCstring = [NSString stringWithCString:encoded.c_str() encoding:[NSString defaultCStringEncoding]];
// NSData from the Base64 encoded std::string
NSData *nsdataFromBase64String = [[NSData alloc]initWithBase64EncodedString:base64EncodedCstring options:0];
一切都很好!!!!.....直到我尝试填充 newImage。
当我得到编码的字符串时,我需要得到一个CGImageRef 以将数据恢复为正确的格式以填充 UIImage。 如果数据格式不正确,则 UIImage 将为 nil。
我需要使用 nsdataFromBase64String 创建一个新的 CGImageRef。
类似:
CGImageRef base64ImageRef = [newCGImageRefFromString:nsdataFromBase64String];
然后我可以使用 imageWithCGImage 将数据放入一个新的 UIImage 中。
类似:
UIImage *imageFromImageRef = [UIImage imageWithCGImage: base64ImageRef];
然后我可以返回 UIImage。
return newImage;
}
请注意,以下行将不起作用:
UIImage *newImage = [[UIImage alloc] initWithData:nsdataFromBase64String];
数据需要采用正确的格式,否则 UIImage 将为 nil。因此,我的问题是“如何使用 NSData 创建 CGImageRef?”
【问题讨论】:
标签: objective-c uiimage cgimage