如何在不使用UIImage的情況下創建新的CGImageRef?我不能使用image.CGImage
如何從NSData字符串數據(不是UIImage)創建CGImageRef
我正在從服務器進程接收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將爲零。
我需要用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?」