Pergunta

Eu estou tentando criar um UIImage de uma matriz de bytes que realmente é realizada dentro de um NSString.

Alguém por favor pode me dizer como posso fazer isso?

Aqui está o que eu estava pensando em fazer:

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];

O problema é imagem é sempre 0x0 (zero).

Todas as sugestões serão apreciadas.

Obrigado!

Foi útil?

Solução

Para converter uma imagem a seqüência que você precisa de um método para NSData convertido em uma string e volta base64Encoded (lotes de exemplos aqui ). Os mais fáceis de usar são categorias em NSData para que você pode fazer algo como isto:

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

Para ir a outra maneira você precisa de um conversor inverso:

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

Outras dicas

[UIImage imageWithData:data]; retornará nil se ele não entender os dados que estão sendo passados ??para ele. Eu iria verificar novamente sua codificação, etc. É estranho que uma string binária iria realizar dados de imagem pura, sem algum tipo de codificação (base64, etc.). codificações de cordas e codificações binárias não são compatíveis.

Eu aposto que os dados de imagem tem alguns caracteres nulos em lá (0x00) e como você sabe que é o terminador para a cadeia, por isso, quando você perguntar para a cadeia C, você provavelmente começar a maneira vias muito poucos dados.

Tente algo como - (NSData *) dataUsingEncoding: (NSStringEncoding) que codifica; para gerar seu NSData.

Se isso não funcionar, você precisa avaliar se a configuração dos dados em um NSString (com caracteres nulos embutidos) não está causando uma perda de dados também.

Como um dos outros entrevistados, talvez base-64 codificação de dados seria uma boa idéia (se estiver usando uma corda para transportar os dados img é uma exigência)

Boa sorte.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top