2012-08-23 3 views
3

인사말! 문제가있어서 인터넷 검색 결과가 없습니다 ...NSView에서 이미지 렌더링하기 : cacheDisplayInRect는 일반적인 drawRect 호출과 달리 투명 영역을 그립니다.

NSView (하위 클래스)에 drawRect 메서드를 구현하여 그림자 및 반투명 채우기를 구현했습니다. 모든 것이 멋지다! 하지만 지금은 드래그 & 드롭 목적으로 NSView (스냅 샷 만들기)에서 NSImage를 생성해야합니다.

이 방법은 효과가 있지만 약간 다른 방식으로 그려집니다.
왜? NSGraphicContext 다른 옵션 때문에? 도움이나 조언이 필요합니다! 여기

는 NSView의에서 NSImage를 얻는 코드입니다 : 비교하는 이미지를 시각적으로

- (NSImage *)makeImageSnapshot { 

    NSSize imgSize = self.bounds.size; 

    NSBitmapImageRep * bir = [self bitmapImageRepForCachingDisplayInRect:[self bounds]]; 
    [bir setSize:imgSize]; 

    [self cacheDisplayInRect:[self bounds] toBitmapImageRep:bir]; 

    NSImage* image = [[[NSImage alloc] initWithSize:imgSize] autorelease]; 
    [image addRepresentation:bir]; 

    return image; 
} 

그리고 현재 위치 :

  1. 정상 -의 drawRect 보통의 호출에 의해 그려진 : 나쁜 http://cl.ly/image/213C1Y1V0v2H
  2. - NSImage에 캡처 됨 : http://cl.ly/image/183q442S2J14

차이점은 아주 작게 보일지도 모른다고 생각합니다. 응용 프로그램을 사용하는 동안 명백합니다. 나는 왜 그런 일이 일어나는지를 털어 놓지 않습니다. 그리고 누군가가 도울 수 있기를 바랍니다.

미리 감사드립니다!

+2

링크가 작동하지 않습니다. 그 이미지들을 다시 가져다 주시겠습니까? 질문 자체에 그것들을 첨부하는 것이 가장 좋을 것입니다. 감사! – 7cows

+0

죄송합니다, 실수로 영구적으로 삭제했습니다. – UJey

답변

4

저는 투명성 문제가 자체적으로 캐시 될 때 다른 것들과 조화를 이루지 않아서 발생한다고 생각합니다.

-dataWithPDFInsideRect : 또는 -dataWithEPSInsideRect : 시도하고 거기에서 이미지 담당자를 얻으십시오.

+0

Thanks, Joshua! 문제는이 이미지를 스크린 밖에서 렌더링하고이 두 가지 방법 모두 잘못된 이미지를 생성한다는 것입니다. 게다가 느리게 작동합니다. NSView 스냅 샷을 생성하는 다른 모든 방법은 투명성을 유지하지 않습니다. 이 경우 drawRect를 수정해야 할 것 같습니다. – UJey