也许我需要将我的问题缩小到一些更简单的事情。
如何将字节串转换为CGImageRef?
这里,我使用的是CFDataRef和CGDataProviderRef。也许有更好的方法?
我收到一个base64编码的图像作为std :: string。现在我需要将它重新填充到CGImageRef中以将数据恢复为正确的格式以填充UIImage。 如果数据格式不正确,UIImage将为零。
我几天来一直在寻找如何做到这一点,我似乎无法弄清楚这一点。这是我尝试转换图像的代码:
- (UIImage *)testProcessedImage:(std::string)byteString
{
CFDataRef dataRef = CFDataCreate( NULL, (const UInt8*) byteString.data(), byteString.length() );
CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData(dataRef);
// Code below does not appear to work
CGImageRef imageRef = CGImageCreateWith ....... ; // Maybe ?
UIImage *image = [UIImage imageWithCGImage:imageRef];
UIImage *image3 = [UIImage imageWithCGImage:(__bridge CGImageRef)(image)];
return image3;
}
有很多代码可以帮助我达到这一点,但我被卡住了。 以上代码返回nil ,我无法弄清楚如何正确使用它。
如果有人想测试这个,这里的代码采用UIImage并通过将图像转换为std :: string来模拟服务器端代码。在此先感谢您的帮助。
- (UIImage *)testChangeImageToBase64String
{
UIImage *processedImage = [UIImage imageNamed:@"myFile.jpg"];
// UIImage to unsigned char *
CGImageRef imageRef = processedImage.CGImage;
NSData *data1 = (NSData *) CFBridgingRelease(CGDataProviderCopyData(CGImageGetDataProvider(imageRef)));
//UIImage *image = [UIImage imageWithCGImage:imageRef];
unsigned char *pixels = (unsigned char *)[data1 bytes];
unsigned long size = [data1 length];
// ***************************************************************************
// This is where we would call transmit and receive the bytes in a std::string
// ***************************************************************************
// unsigned char * to string
const std::string byteString(pixels, pixels + size);
UIImage *newImage = [self testProcessedImage:byteString];
return newImage;
}