Цель C — Как получить CGImageRef из C ++ base64 image string image

Может быть, мне нужно уменьшить свой вопрос до чего-то более простого.

Как получить строку байтов в 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;
}

Существует много кода, который помог мне добраться до этой точки, но я застрял. Приведенный выше код возвращает ноль и я не могу понять, как сделать это правильно.


Если кто-то хочет проверить это, вот код, который принимает 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

Решение

Задача ещё не решена.

Другие решения