2014-04-09 2 views
0

NSScrollView 객체의 NSImage를 만들고 싶습니다. 그래서 애니메이션 용도로 평면 그래픽을 사용할 수 있습니다.NSImage는 항상 크기가 조절되고 나쁘게 보입니다.

내 scrollview 개체를 그래픽으로 렌더링하고 내 창에 다시 추가하면 효과가 있지만 실제로는 99 % 정도 크기가 조정 된 것처럼 보입니다. 이미지의 크기가 조정되지 않고 100 % 픽셀 정확해야합니다. (참고 :이 제대로 슬캘링 된 것처럼 이미지 가 확장이 아니라, 같은 크기의, 그냥 보이는 - 텍스트가있는 ScrollView에서보기 화면에 비해 거칠고 빈약 한 모양)

내 코드 : 대상 NSView의를 만들고 그 안에 이미지를 넣어 IB 사용되는 픽셀 크기, 경계, 엉망

NSData *pdf = [scrollView dataWithPDFInsideRect:[scrollView bounds]]; 
NSImage *image = [[NSImage alloc] initWithData:pdf]; 

NSImageView *imageView = [[NSImageView alloc] initWithFrame:[scrollView bounds]]; 
[imageView setImage: image]; 
[mainGUIPanel addSubview: imageView]; 

내가 물건의 힙을 시도했습니다, (있는 ScrollView 내 NSScrollView 개체입니다)하지만, 단지 이미지를 얻을 수 없다 보기 좋지 않다. 어떤 아이디어?

편집 : 나는 pdf 파일에 pdf 데이터를 쓰려고 시도하고 그것을 보았지만 괜찮아 보였다. 따라서 비트 맵 이미지가 캡쳐되고 있습니다. 화면에 표시되는 것이므로 크기가 약간 조정 된 것처럼 보입니다.

Edit2가 : 은 또한이 같은 비트 맵을 받고 시도 :

NSBitmapImageRep *bitmap = [scrollView bitmapImageRepForCachingDisplayInRect:[scrollView bounds]]; 
[scrollView cacheDisplayInRect:[scrollView bounds] toBitmapImageRep:bitmap]; 

NSImage * image = [[NSImage alloc] initWithSize:[bitmap size]]; 
[image addRepresentation: bitmap]; 

같은 결과를 - 비트 맵이 정확히 보이는, 같은 나쁜 표시 될 때 확장.

이것은 비트 맵 데이터를 캡처하는 것이 잘 작동한다고 생각합니다. 뷰를 만들고 스케일링을 수행하는 이미지를 렌더링합니다. 보기와 이미지가 올바른 크기와 배율로 표시되는지 어떻게 확인할 수 있습니까?

편집 3 : 좋아, 새 빈 프로젝트를 시작하고 이것을 설정하면 완벽하게 작동합니다. 새로운 이미지 뷰는 잡힌 비트 맵과 동일합니다. 그래서 비트 맵을 뷰에 드로잉 할 때 렌더링/합성 문제로 인해 문제가 발생하는 것으로 생각됩니다. 추가 조사 ...

문제는 제가 렌더링 한 scrollView에서 유래 한 것으로 나타났습니다. 이것은 투명한 배경을 가지고 있습니다. (Draw Background는 IB에서 꺼져 있습니다.) 그리고 텍스트는 scrollView처럼 보입니다. 투명한 배경색으로 "Draw Background ON"을 설정하면 이미지를 프로그래밍 방식으로 캡처 할 때와 마찬가지로 텍스트가 잘못 렌더링됩니다.

내 앱에서 Draw Background가 꺼져 있어도 Draw Background가 켜져있는 것처럼 scrollView 이미지가 캡처됩니다. 그리기 배경이 켜져 있고 투명하게 설정되었을 때 텍스트가 왜 잘못 렌더링되는지 이해해야합니다. 그러면이 문제가 해결책으로 이어질 수 있기를 바랍니다.

백그라운드 렌더링이 해제 된 상태에서 NSClipview를 생성하고 비트 맵보기를 넣었지만 그 화면은 렌더링됩니다. 끔찍한 유물없이 화면에 투명한 이미지를 렌더링하는 방법을 찾을 수 없습니다.

답변

1

좋아, 해결책을 찾았습니다. 대신 투명 배경 scrollview 개체 자체를 잡는 대신 부모보기 (본질적으로 창 배경) 잡아 및 경계를 scrollview 개체의 크기를 제한하는 있어요.

배경과 스크롤 뷰의 내용을 모두 캡처하여 투명성 문제없이 올바르게 표시합니다.

관련 문제