2017-05-09 79 views
1

그래픽 상태 및 장치와 약간 혼동 스럽습니다.PostScript (페이지) 장치 관련 질문

PLRM 페이지 679 :

유효한 경우 현재 페이지 디바이스에 대해, 이들 요구 값은 현재 페이지 장치 사전에 setpagedevice 의해 병합된다. 이러한 매개 변수의 해석은 6.2 절에 설명되어 있습니다 "페이지 장치 매개 변수."

나는 이것이 내가 그래픽 상태가 현재 페이지 장치 사전을 유지하고 있음을 이해 읽는다면. 그것은 또한 "현재 페이지 장치」를 개최 것으로 보인다

나는 사전이 장치에서 기본값으로 읽기 전용"개체 "입니다 수정할 수있는 하나 현재 페이지 장치 가정?

  • pagedevice는
  • cachedevice
  • nulldevice는
  • ...

하지만이 graphicsstate가 보인다 : 두 개 이상의 기기가 있다는 것을 알고있는 매뉴얼을 읽어

페이징 장치 만 신경 써라. 이 올바른지? 설정시 cachedevice 및 nulldevice는 어디에 저장됩니까?

내가 IdePS를 시도하면 고스트 스크립트는 상태 dict에 currentpagedevice 만 있다는 것을 알 수 있습니다. "nulldevice"를 실행할 때 현재 페이지 장치가 여전히 존재합니다. enter image description here

"현재 페이지 장치"(사전이 아님)도 그래픽 스테이트에도 저장되어 있습니까?

답변

2

현재 페이지 장치는 미디어에 표시를 표시합니다. Ghostscript에서 -sDEVICE 매개 변수는 초기 페이지 장치입니다.

그러나 다른 많은 장치가있을 수 있습니다. 가장 명백한 것은 nulldevice이며 이는 단순히 비트 버킷입니다. nulldevice을 실행하면 그래픽 상태의 현재 페이지 장치가 널 (null) 장치로 바뀝니다. 분명히 보통 gsave/grestore 쌍 내에서이 작업을 수행하므로 grestore 원래 장치로 돌아갈 수 있습니다.

마찬가지로 글리프를 캐시로 렌더링하는 동안 캐시 장치를 밀어서 현재 페이지 장치로 만듭니다. 다시 이것은 암시 적 저장/복원에서 수행되므로 일반 페이지 장치로 돌아갈 수 있습니다. 그리드를 표현하기 위해 렌더링 된 글리프를 나타내는 비트 맵을 얻을 수 있습니다.

이러한 장치를 I/O 장치와 같은 다른 장치와 구별하기 위해 페이지 장치라고합니다.

각 페이지 장치에는 키와 값이 포함 된 페이지 장치 사전 (비어있을 수 있음)이 있습니다. currentpagedevice을 실행하여 장치의 현재 설정을 사전으로 검색 할 수 있습니다.키/값 쌍이있는 사전을 만들고 setpagedevice을 사용하여 장치에 요청을 보내 장치의 동작을 수정할 수 있습니다. 장치는 요청을 무시할 수 있으며 요청하지 않으면 현재 페이지를 다시 설정합니다.

그래서 나는 기대 :

currentpagedevice {exch == ==} forall 
nulldevice 
currentpagedevice {exch == ==} forall 

는 다른 결과를 제공 할 수 있습니다.

NOTE 페이지 장치가 사전 그래픽 상태의 일부로서 유지되지 않고, 그것은 장치에 의해 유지된다.

그래픽 상태에있는 것은 장치 자체이며 일반적으로 어떤 것도 할 수없는 일종의 불투명 한 개체입니다.

당신이 무엇을 의미하는지 모르겠다. "내가 IdePS를 시도하면 고스트 스크립트가 상태 dict에 현재 페이지 장치 만있는 것을 볼 수 있습니다."nulldevice "를 실행할 때 currentpagedevice는 여전히 존재합니다."

currentpagdevice은 현재 페이지 장치에 속한 페이지 장치 사전을 반환하는 연산자입니다. 그래서 당신은 "state dict에서 currentpagedevice"를 가질 수 없습니다. currentpagedevice은 연산자가 있기 때문에 항상 있습니다.

위의 코드를 실행하면 원본 페이지 장치에 많은 항목이있는 사전이 있지만 null 장치에 빈 페이지 장치 사전이 있다는 것을 알 수 있습니다.

[편집]

음, 에서의 사전 고스트,하지만 그 때문에 이상한 방식으로 고스트의 (적어도 부분적으로)이다는 setpagedevice를 실제 구현의 것을. FWIW Distiller는 사전으로도 구현하지만 최소한 하나의 인터프리터는 C 구조체에서 유지 관리되는 항목으로 새 사전을 만들고 currentpagedevice가 실행될 때이를 반환합니다. 나는 이것이 PostScript 질문이 아닌 Ghostscript의 특별한 질문이 아니라고 생각했다 .... :-)

사전으로 구현 한 경우, 장치가 관리하는 사전이 동기화되어 있는지 확인해야합니다 그래픽 상태의 사전 또는 현재 페이지 장치에서 사전을 반환하는 데 사용하는 다른 방법을 사용합니다. 물론, 이것들은 문제가 아니라는 것을 의미하는 동일한 사전 일 수 있습니다.

어떻게 프로그램이 작동하는지, 그래픽 상태가 불투명 한 개체인지, 질문 할 수는 없습니다. 내 생각에이 프로그램은 '국가'에 대한 자체 기록을 유지하고있다. 그 기록은 통역사의 내부 상태와 아무런 관련이 없습니다. 사실 'Ghostscript'가 내부적으로 유지하는 그래픽 상태의 내용에 '상태'아래에 열거 된 것이 없다고 말할 수 있습니다.

간단히 말해서 currentpagedevice를 실행하고 사전 내용을 읽는 IdePS 프로그램을 제안합니다. 왼쪽에는 사전에 내용이 있고 오른쪽에는 내용이 있습니다.

'상태'는 통역사의 특정 구현을 의미하지 않으며, 프로그램 자체 만 추적하는 프로그램이라고는 생각하지 않습니다.

+0

"페이지 장치 사전은 그래픽 상태의 일부로 유지 관리되지 않으며 장치에 의해 유지 관리됩니다." 내 스크린 샷보기 "currentpagedevice"는 그래픽 상태의 dicttype입니다.그래서 그것은 그래픽 상태의 일부입니다,하지만 당신은 그것이 그래픽 상태의 일부로 유지되지 않는다고 말합니다, 그것이 분리 된 객체라는 것입니다. 조금 더 명확하게 할 수 있습니까? nulldevice, cachedevice 및 displaydevice가 모두 "페이지 장치"임을 올바르게 이해하고 있습니까? 그리고 nulldevice는 빈 페이지 장치 사전이있는 페이지 장치 일뿐입니다. – juFo