CFArray到NSData到NSImage

时间:2011-04-23 02:06:14

标签: objective-c xcode macos nsdata nsimage

我有一个带有jpeg照片数据的plist文件。我需要把那张照片拿出来。我可以将plist文件读入NSDictionary,并可以通过键“jpegphoto”访问该对象。问题是返回的对象是NSCFArray,我不知道如何使用。我可以打印它,我看到一个很好的八位字节流出来,但这就是我知道该怎么做。如何将此NSCFArray转换为NSData或字节数组?

CFArray传递给NSLog时如此

NSLog(@"%@", [plistDictionary objectForKey:@"jpegphoto"]);

吐出类似于

的数百行
5ed15ee6 df44b2ff 00899699 0dd23b58 dccdcadc 6c8d04e1 8b3e1940 af76953e 7c0e1b56 

我知道这是我做过的CFArray b / c

NSLog(@"%@", NSStringFromClass([[data_dictionary objectForKey:@"jpegphoto"] class]));

然后回来了

NSCFArray

由于

1 个答案:

答案 0 :(得分:0)

我能想到的就是这个:

NSArray * array = [ data_dictionary valueForKey:@"jpegphoto" ] ;
NSMutableData * data = [ NSMutableData dataWithCapacity:array.count * 4 ] ;
uint32_t * dataPtr = [ data mutableBytePtr ] ;
NSUInteger index = 0 ;
for( NSNumber * number in array )
{
    dataPtr[ index++ ] = [ number unsignedLongValue ] ;
}

假设数组中充满了CF / NSNumber实例。 如果它是原始(非对象)值的CFArray,请尝试这样的事情:

CFArrayRef array = (CFArrayRef)[ data_dictionary valueForKey:@"jpegphoto" ] ;
CFDataRef data = CFDataCreateMutable( kCFAllocatorDefault, CFArrayGetCount( array ) * 4 ) ;
CFArrayGetValues( array, (CFRange){ 0, CFArrayGetCount( array ) }, (void**)CFDataGetMutableBytePtr( data ) ) ;