NSData 读取 png 图片需要注意的地方~

来源:互联网 发布:淘宝免费开店考试 编辑:程序博客网 时间:2024/05/21 02:49

环境:

MAC OS X 10.7.2 Lion, XCode4.2,iOS SDK 5.0~


结论:

若要用NSData 获取 png 资源图片的数据,

须得用到 [NSBundle mainBundle] pathForResource 方法~

如果直接用 NSData 的 dataWithContentsOfFile 方法,

所返回的 NSData 对象是没有用的!!

这样的 NSData 对象里面既不包含字节数组数据,也不包含字节数组的长度数据!!


直接上代码和控制台输出:

    // 1.不带后缀,可以取得图片数据~

    UIImage *img1 = [UIImage imageNamed:pngName];

    NSLog(@"%@:%f, %f", pngName, img1.size.width, img1.size.height);

    

    // 2.戴上后缀,也可以缺的图片数据~

    NSString *nameWithSuffix = [NSString stringWithFormat:@"%@.png", pngName];

    UIImage *img2 = [UIImage imageNamed:nameWithSuffix];

    NSLog(@"%@:%f, %f", nameWithSuffix, img2.size.width, img2.size.height);

    

   // 1.这种方式取得的 NSData对象的 length属性为 0无效(不管图片带没带.png后缀)!

    NSURL *url = [NSURL URLWithString:pngName];

   NSLog(@"%@", [urlabsoluteString]);

    NSData *imageData1 =[[NSData alloc] initWithContentsOfURL:url];

    NSLog(@"%u", [imageData1 length]);

    

   // 2.这种方式取得的 NSData对象的 length属性也为 0无效(不管图片带没带.png后缀)!

    NSData *imageData2 = [NSData dataWithContentsOfFile:pngName];

    NSLog(@"%u", [imageData2 length]);

    

   // 3.唯有这种方式取得的 NSData对象的 length属性不再为 0有效!!

    NSString *filePath = [[NSBundle mainBundle] pathForResource:pngName ofType:@"png"]; 

    NSData *imageData3 = [[NSData alloc] initWithContentsOfFile:filePath];

    NSLog(@"%u", [imageData3 length]);

控制台输出为:

   2012-01-11 19:16:31.938 EncryptTool[4920:f803] chrome:113.000000, 118.000000

   2012-01-11 19:16:31.939 EncryptTool[4920:f803] chrome.png:113.000000, 118.000000

   2012-01-11 19:16:31.941 EncryptTool[4920:f803] chrome

   2012-01-11 19:16:32.004 EncryptTool[4920:f803] 0

   2012-01-11 19:16:32.011 EncryptTool[4920:f803] 0

   2012-01-11 19:16:32.011 EncryptTool[4920:f803] 14328



原创粉丝点击