如何从C ++ base64字节串图像中获取CGImageRef

时间:2014-07-21 22:26:11

标签: c++ objective-c uiimage cgimage

也许我需要将我的问题缩小到一些更简单的事情。

  

如何将字节串转换为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;
}

0 个答案:

没有答案