2013-04-02 5 views
2

현재 NSView에서 베 지어 경로를 사용하여 일부 모양을 그립니다. 드로잉 코드는 drawRect : 메소드에서 실행되고 끝에 이미지가 생성됩니다.코코아를 사용하여 NSImage 그리기

나는이 위치를 사용자에게 보여주고 싶지 않습니다. 그러나 내가 알고있는 것처럼 drawRect : 메서드는 뷰를 슈퍼 뷰에 추가 한 다음 NSView에서 display 또는 displayNeedsUpdate 메서드를 호출 할 때만 호출됩니다.

내 요구 사항은 내 필요 도면의 이미지를 만드는 것입니다.

NSView에서 그림을 그려서 PNG로 변환하는 대신 이미지를 직접 그릴 수있는 방법이 있습니까?

답변

2

NSBitmapImageRep을 만들고보기 프레임을 지정하여 bitmapImageRepForCachingDisplayInRect:을 사용해야합니다.

비트 맵 이미지 표현이 그려집니다.

그런 다음 representationUsingType:NSPNGFileType properties:nil을 사용하고 결과를 파일에 써야합니다.

아래 사랑의 튜토리얼 코코아에서 추출 된 샘플 : Advanced drawing using AppKit

NSRect iconViewFrame = iconView.frame; 
[iconView setFrame:[iconView nativeRect]]; 

NSBitmapImageRep *bitmapImageRep = 
    [iconView bitmapImageRepForCachingDisplayInRect:[iconView frame]]; 
[iconView 
    cacheDisplayInRect:[iconView bounds] 
    toBitmapImageRep:bitmapImageRep]; 
[[bitmapImageRep representationUsingType:NSPNGFileType properties:nil] 
    writeToURL:[savePanel URL] 
    atomically:YES]; 

[iconView setFrame:iconViewFrame]; 

그들은 또한 조언 :

을 자신의 NSBitmapImageRep 만들기, graphicsContextWithBitmapImageRep를 사용하여 NSGraphicsContext 설정 :, 고정 초점 자신과 은 drawRect :를 호출하면 이러한 문제를 직접 피할 수 있으며 더 유연한 입니다. 하지만이 더 샘플 프로젝트 (대부분이 애플 리케이션에이 수출 코드를 넣으려고 귀찮게하지 않았으므로 애플 리케이션 아이콘을 만들 수있다).

귀하의 요구에 가장 적합한 솔루션을 선택할 수 있습니다.

+0

내가 틀렸다면 정정 해주세요.이 코드 조각은 NSView를 PNG로 변환하는 것입니까, 그렇지 않습니까? draw를 만들려면 -drawRect 메서드가 실행되어야합니다. – user523791

+1

표준 방법입니다. 그러나 **보기는 ** 이렇게 표시 할 필요가 없습니다. 보기를 표시하지 않고보기 만 작성하면됩니다. 일반적으로 사람들은 자신의 견해의 특정 부분을 인쇄 할 필요가있을 때도 똑같이 수행합니다. – Jean

+0

빠른 답변을 보내 주셔서 감사합니다. – user523791

관련 문제