Вопрос

Я пытаюсь создать UIImage из массива байтов, который фактически хранится в NSString.

Может кто-нибудь сказать мне, как я могу это сделать?

Вот что я думал сделать:

NSString *sourceString = @"mYActualBytesAREinHERe=";
//get the bytes
const char *bytesArray = [sourceString cStringUsingEncoding:NSASCIIStringEncoding];
//build the NSData object
NSData *data = [NSData dataWithBytes:bytesArray length:[sourceString length]];
//create actual image
UIImage *image = [UIImage imageWithData:data];

Проблема в изображение всегда равно 0x0 (ноль).

Мы ценим любые предложения.

Спасибо!

Это было полезно?

Решение

Чтобы преобразовать изображение в строку, вам нужен метод преобразования NSData в строку в кодировке base64 и обратно (множество примеров здесь).Самыми простыми в использовании являются категории на NSData поэтому вы можете сделать что-то вроде этого:

UIImage* pic = [UIImage imageNamed:@"sample.png"];
NSData* pictureData = UIImagePNGRepresentation(pic);
NSString* pictureDataString = [pictureData base64Encoding];

Чтобы пойти другим путем, вам понадобится обратный преобразователь:

UIImage* image = [UIImage imageWithData:[NSData 
            dataFromBase64EncodedString: pictureDataString]];

Другие советы

[UIImage imageWithData:data]; вернет ноль, если он не понимает передаваемые ему данные.Я бы дважды проверил вашу кодировку и т. д.Странно, что двоичная строка может содержать чистые данные изображения без какой-либо кодировки (base64 и т. д.).Строковые и двоичные кодировки несовместимы.

Могу поспорить, что в данных вашего изображения есть несколько нулевых символов (0x00), и, как вы знаете, это признак конца строки, поэтому, когда вы запрашиваете строку C, вы, вероятно, получаете слишком мало данных.

Попробуйте что-то вроде - (NSData *)dataUsingEncoding:(NSStringEncoding)кодировка;для создания ваших NSData.

Если это не сработает, вам нужно оценить, не приводит ли установка данных в NSString (со встроенными нулевыми символами) к потере данных.

Как и один из других респондентов, возможно, кодирование ваших данных в формате Base64 было бы хорошей идеей (если использование строки для транспортировки данных img является обязательным требованием)

Удачи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top