2010-01-18 35 views

回答

42

你能做到这样....

NSData *imgData = (NSData *)ABPersonCopyImageData(person); 

UIImage *img = [UIImage imageWithData:imgData]; 

其中personABRecordRef类型。现在,由于CFData和NSData是免费桥接的,您只需键入cast CFDataNSData并获取图像

希望这有助于您。

+0

只是一张纸条, “imgaeWithData:imgData” 中的代码片段的最后一行应改为 “imageWithData:imgData”。我修复了它 – 2011-05-17 10:06:52

+0

请注意,这可能不是用户期望的图像,因为它不是图像的裁剪版本。看到[ChangUZ的回答](http://stackoverflow.com/a/6953492/784318) – Besi 2012-01-23 14:06:25

+0

@Besi但是没有提及任何图像格式是有利的,因为在表视图的单元格中填充图像时,我们使用图像视图作为附属视图,因为它会自动调整图像大小并以独特的格式(相同的尺寸)设置每个图像:) – 2012-07-18 09:17:34

12
(NSData*)ABPersonCopyImageDataWithFormat([targetPeople objectAtIndex:index], kABPersonImageFormatThumbnail) 

由于它返回缩略图,所以速度更快。

+0

+1,因为除了作为缩略图之外,联系人的图像可能会被裁剪,因此ChangUZ的方法将返回地址簿中显示的相同图像。 – Besi 2012-01-23 14:02:48

+2

但是这个方法可以从iOS 4.1中获得。 – rowwingman 2012-03-31 14:51:13

0

略刷新代码:

UIImage *image = nil; 

@try 
{ 
    CFDataRef cfImage = ABPersonCopyImageData(person); 
    // or CFDataRef cfImage = ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail); 
    if (cfImage) 
    { 
     image = [UIImage imageWithData:(__bridge NSData*)cfImage]; 
     CFRelease(cfImage); 
    } 
} 
@catch (NSException *exception) 
{ 
    //... 
} 
相关问题