我试图在每张联系人照片周围添加一个边框。我有工作代码来创建此边界图像和工作代码以将其设置为联系图像:

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进行通信,这确实是通讯录框架中的错误。如果您正在阅读这篇文章,我建议您 用苹果提交错误 在帮助加快修复程序。

有帮助吗?

解决方案

我将在这里回答自己的问题,因为我想我弄清楚了什么问题。如果您的联系人尚未具有图像,则使用AbperSonSetimagedata时,将添加缩略图和完整尺寸的镜头。如果您的联系人已经具有全尺寸图像,则仅在使用AbperSonSetimateData时设置缩略图。

意识到这一点后,解决方案是不明智的。我只是在设置它之前就删除图片。

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进行通信,这确实是通讯录框架中的错误。如果您正在阅读这篇文章,我建议您 用苹果提交错误 在帮助加快修复程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top