环境:
MAC OS X 10.7.2 Lion, XCode4.2,iOS SDK 5.0~
结论:
若要用NSData 获取 png 资源图片的数据,
须得用到[NSBundlemainBundle]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