Может быть, мне нужно уменьшить свой вопрос до чего-то более простого.
Как получить строку байтов в 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;
}
Задача ещё не решена.