2009-10-06 4 views
6

각 연락처 사진 주위에 테두리를 추가하려고합니다. 나는이 경계 이미지를 생성하는 코드를 작업과 연락처 이미지로 설정하는 코드를 작업 한 다음 보더 이미지가 미리보기에 제대로 표시하면서 연락처에서 볼 때ABPersonSetImageData Contact Thumbnail 만 변경하고 전체 Pic을 변경하지 마십시오.

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); 
} 

내가보고하고 문제가 있거나 전화 응용 프로그램, 수신 전화에서 표시되는 전체 화면 이미지가 아닙니다.

원래 크기가 약간 확대 된 것으로 생각하여 테두리 크기로 실험했습니다. 나는 국경이 큰 총에 전혀 보이지 않는 것을 확인했다. 나는 명백한 것을 놓치고 있는가?


EDIT 10/9/09 나는 애플과 통신하고 있는데 이것은 실제로 주소록 프레임 워크의 버그이다. 이 게시물을 읽는 중이라면 file a bug with Apple 번으로 수정하시는 것이 좋습니다.

답변

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으로 설정합니다. 그러나 그것은 효과적입니다.

EDIT 10/9/09 저는 Apple과 통신을 해왔으며 이는 실제로 주소록 프레임 워크의 버그입니다. 이 게시물을 읽는 중이라면 file a bug with Apple 번으로 수정하시는 것이 좋습니다.

+0

나는이 이미지를 대체 할 수 있지만 전화가 오면 여전히 축소판 그림을 보여줍니다 ... 그림을 수동으로 삭제하고 코드로 교체해 보았습니다. 그러나 사용하지 마십시오. 이것이 작동하는지 궁금합니다. 감사합니다. –

관련 문제