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

环境:

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值