我正在尝试在每张联系人照片周围添加边框。我有工作代码来创建这个有边框的图像和工作代码,将其设置为联系人图像:
if (image) {
NSData *dataRef = UIImagePNGRepresentation(image);
CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);
CFErrorRef error;
ret = ABPersonSetImageData(person, cfdata, &error);
if (ret) {
ret = ABAddressBookSave(addressBook, &error);
} else {
DebugLog(@"Could not write the image to the person: %@", [error description]);
}
CFRelease(cfdata);
}
我看到的问题是,当在联系人或手机应用程序中查看时,边框图像在缩略图中正确显示,而来电显示的全屏图像则不是。
我原本以为它只是放大了一点,所以我尝试了边框大小。我确认边框在大镜头上根本没有显示。我错过了一些明显的东西吗?
<小时/> 编辑10/9/09 我一直在与Apple通信,这确实是地址簿框架中的一个错误。如果你正在阅读这篇文章,那么我建议你file a bug with Apple来帮助加快修复。
答案 0 :(得分:7)
我想在这里回答我自己的问题,因为我认为我找出了问题所在。如果您的联系人还没有图像,则在使用ABPersonSetImageData时,将添加缩略图和全尺寸镜头。如果您的联系人已经有一个完整大小的图像,那么当您使用ABPersonSetImageData时,只会设置缩略图。
在意识到这一点之后,解决方案是明智之举。我只是在设置之前删除了图片。
if (image) {
NSData *dataRef = UIImagePNGRepresentation(image);
CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);
CFErrorRef error;
ABPersonRemoveImageData(person, &error); // <-- clean any image first from ref
ABAddressBookSave(addressBook, &error);
ret = ABPersonSetImageData(person, cfdata, &error);
if (ret) {
ret = ABAddressBookSave(addressBook, &error);
} else {
DebugLog(@"Could not write the image to the person");
}
CFRelease(cfdata);
}
注意*这会创建一个正方形版本的全尺寸图片。该过程裁剪图像的顶部和底部,并将其设置为320x320。但是,它正在发挥作用。
编辑10/9/09 我一直在与Apple通信,这确实是地址簿框架中的一个错误。如果你正在阅读这篇文章,那么我建议你file a bug with Apple来帮助加快修复。