[Cocoa] NSView를 이미지로 캡쳐하기

한번 다룬걸로 기억하는데, 찾아보니 없어서 다시 기록해 둠.

NSView를 이미지로 캡쳐하는 방법은 NSBitmapImageRep를 사용할 수 있다. NSBitmapImageRep의 -initWithFocusedViewRect:를 사용하면 뷰의 내용을 이미지 데이터로 추출하여 손쉽게 이미지를 만들 수 있다.

-(NSData*)captureView:(NSView*)theView
{
    NSBitmapImageRep *rep = [initWithFocusedViewRect:];
    NSData *data = [rep TIFFRepresentation];
return data;
}

Swift 코드로는 다음과 같이 쓸 수 있다.

func captureView(_ theView: NSView) -> Data? {
    return NSBitmapImageRep(focusedViewRect: theView)?.tiffRepresentation
}

그런데 NSView의 기능중에는 이걸 바로 만들어주는 메소드가 있다.

let viewImageData: Data? = view.bitmapImageRepForCachingDisplay(in: view.bounds)

만약 데이터를 저장하고자 한다면 TIFFRepresentation값으로부터 저장할 그래픽 포맷에 대한 데이터를 얻어야 한다.

NSData theData = [rep representationUsingType:NSJPEGFileType properties:nil];

이렇게 타입을 지정한 데이터를 파일로 기록하면 바로 JPG 이미지 파일을 얻을 수 있게 된다.

관련내용

UIView를 UIImage로 캡쳐하는 방법도 있다.