代码之家  ›  专栏  ›  技术社区  ›  nicktmro

来自nsstring中保留的字节的uiimage

  •  4
  • nicktmro  · 技术社区  · 15 年前

    我试图从一个字节数组中创建一个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(零)。

    任何建议都将不胜感激。

    谢谢!

    3 回复  |  直到 13 年前
        1
  •  13
  •   Ramin    15 年前

    要将图像转换为字符串,需要一个方法来转换 NSData 返回base64编码的字符串(许多示例 here )最容易使用的是分类 操作文件数据 所以你可以这样做:

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

    换一种方式,你需要一个反向转换器:

    UIImage* image = [UIImage imageWithData:[NSData 
                dataFromBase64EncodedString: pictureDataString]];
    
        2
  •  0
  •   amattn    15 年前

    [UIImage imageWithData:data]; 如果它不理解传递给它的数据,将返回nil。我会仔细检查您的编码等。奇怪的是,一个二进制字符串会保存纯图像数据而不进行某种编码(base64等)。字符串编码和二进制编码不兼容。

        3
  •  0
  •   Raymond W    15 年前

    我敢打赌您的图像数据中有一些空字符(0x00),正如您所知道的,这是字符串的终止符,所以当您请求C字符串时,可能得到的数据太少了。

    尝试一下 -(nsdata*)数据使用编码:(nsstringencoding)编码; 生成NSdata。

    如果这不起作用,您需要评估将数据设置为nsstring(嵌入空字符)是否也不会导致数据丢失。

    与其他受访者一样,对数据进行base-64编码可能是个好主意(如果需要使用字符串传输img数据)

    祝你好运。