2010-05-04 2 views
1

나는 만화책 컬렉션을 유지하기 위해 응용 프로그램을 작성 중입니다. 사용자는 커버 아트 작품의 이미지를 ImageWell을 통해 프로그램으로 드래그 할 수 있어야합니다.코코아 : 이미지를 ImageWell로 드래그

다시 응용 프로그램에서 이미지를 드래그 할 수 없으므로 원래 크기로 그림을 저장할 필요가 없습니다. ImageWell 크기의 이미지는 좋을 것입니다.

질문은 어떻게 응용 프로그램으로 이미지 크기를 조정합니까?

ImageWell은 훨씬 더 복잡한 작업을하기 위해 핵심 데이터에 바인딩됩니다. 따라서 코어 데이터가 원본 크기로 그림을 저장하기 전에 이미지의 크기를 조정해야합니다.

답변

3

이미지를 확장하는 일반적인 방법은에서 원하는 작은 크기로 새로운 NSImage, lockFocus을 할당하고 (당신은 물론, 완료 unlockFocus)를 NSImage로 원본 이미지를 그릴 것입니다. 거기에서 CoreGraphics API를 사용하여 다양한 형식으로 이미지를 직렬화 할 수 있으며 필요에 따라 TIFFRepresentation 메서드를 NSImage에 사용할 수도 있습니다.

핵심 데이터를 다루는 데있어 이미지를 소유하고있는 개체와의 관계가있는 별도의 엔터티에 이미지를 보관하는 것이 좋습니다. 이유는 Core Data가 가져올 때 한 번에 한 객체에 대한 모든 데이터를로드하기 때 문에 이미지 데이터 (작은 이미지의 경우에도 꽤 클 수 있음)가 필요하지 않을 때 느린 성능과 메모리 압력을 피할 수 있기 때문입니다. 가져올 때마다 메모리에로드합니다. 필요에 따라 느리게로드/저장하는 기본 엔티티에 일시적인 image 속성을 넣을 수 있습니다.

이미지가 새 이미지와의 바인딩을 업데이트하면 이미지를 다시 스케일하고 데이터 객체에 이미지를 저장할 수있는 좋은 기회가됩니다. 즉, 바인딩을 통해 전체 크기 이미지를 데이터 객체로 전달하고 크기 재조정을 처리합니다.

1

NSValueTransformer를 생각하십시오. 값 변환기는 값을 변환합니다. 따라서 이미지의 크기를 변경 (예 : 변형)하고 값 변환기가 바인딩을 통해 작업하기를 원합니다. 인터페이스 빌더의 바인딩을 보면 "Value Transformer"섹션이 표시되며 여기에서 트랜스포머를 연결합니다. 트랜스 포머에는 stuff, transformationValue 메소드 및 reverseTransformedValue 메소드의 두 가지 주요 메소드가 있습니다. 첫 번째는 데이터를 이미지 뷰에 표시 할 때 사용되며 두 번째는 반대 방향으로 사용됩니다 ... 데이터가 핵심 데이터 모델에 기록 될 때. 따라서 핵심 데이터와 인터페이스 사이에있는 인 - 아웃 방식입니다.

귀하의 경우에는 reverseTransformedValue 메소드에서 크기 조정 작업을 수행하십시오 (Alex의 설명대로). 자세한 내용과 수행해야 할 일의 예는 here을 참조하십시오.

관련 문제