2016-06-19 9 views
0

PWG 래스터 파일에서 포스트 스크립트 파일을 생성하는 C 코드를 작성했습니다. 출력이 진행 중입니다 (형식은 컬러 모델 - 비트 심도입니다) : black-1, black-8, black-16, rgb-8, rgb-16, gray-1, gray-8, gray-16, srgb-8 , srgb-16, adobergb-8, sgray-1, sgray-8, cmyk-1, cmyk-8, cmyk-16. 그러나 adobergb-16 및 sgray-16의 결과는 잘못되었습니다. 입력 파일과 비슷한 패턴을 얻을 수 있지만 색상은 모두 픽셀 화됩니다.일부 색상 모델에서 포스트 스크립트 이미지 출력이 잘못됨

실제 코드는 매우 큰, 그래서 내가 무슨 짓을 게시하고있다 : 나는 /DeviceRGB에 PS 색 공간을 설정하고 AdobeRGB로-16 및 디코드 배열에 대한

take all the image pixels in an unsigned char* variable (this sometimes becomes very large) 

encode the pixels using deflate algorithm from zlib 

display the result 

/Decode [0 1 0 1 0 1]입니다. sgray-16의 경우 PS 색상 공간을 /DeviceGray으로 설정하고 디코드는 /Decode [0 1] 입니다.이 설정은 adobergb-8 및 sgray-8과 유사합니다.

편집 1 : 난 당신이 어떤 추가 정보 또는 코드 조각을 원하는 경우에 HERE

을 테스트하는 데 사용되는 예제 파일을 추가, 물어 주시기 바랍니다.

+0

PostScript의 어떤 버전도 입력 (경고, 비표준 확장이 있음)에 대한 16 비트 이미지 데이터를 지원하지 않습니다. PostScript에서 사용 가능한 가장 높은 BitsPerComponent는 12입니다. 16 비트 데이터를 12 비트 (또는 8 비트?) 색상 공간으로 밀어 넣으려는 경우 결과가 예상과 다를 수도 있습니다. 16 비트 값을 2 8 비트 값으로 처리하면 모든 두 번째 픽셀이 눈에 띄게 틀립니다. 이것에 대한 도움이 필요하면 예제를 게시해야합니다. 좋은 간단한 간단한 예를 만들고 그것에 대한 링크를 게시하십시오. – KenS

+0

@KenS 예제 파일을 게시했습니다. 한번 봐주세요. – Pranjal

답변

2

그럼 "/ BitsPerComponent 16"을 설정했습니다. 위에서 말했듯이 PostScript는 구성 요소 당 1, 2, 4, 8 및 12 비트만을 지원하므로 합법적 인 값은 아닙니다. 는 Adobe Acrobat Distiller를 통해이 파일을 실행

제공 :

%% [오류 : rangecheck; OffendingCommand : imageDistiller; ERRORINFO : BitsPerComponent 16] %%

이 같은 이미지를 다시 쓰기 : 예상대로

gsave 
/DeviceRGB setcolorspace 
/Input currentfile /FlateDecode filter def 
4958 7017 scale 
<< 
/ImageType 1 
/Width 4958 
/Height 7017 
/BitsPerComponent 8 
/Decode [0 1 0 1 0 1] 
/DataSource {3 string 0 1 2 {1 index exch Input read {pop}if Input read pop put } for} bind 
/ImageMatrix [4958 0 0 -7017 0 7017] 
>> image 

8에 BitsPerComponent을 설정, 모든 16 비트 값의 상위 바이트, 출력 작업을 삭제합니다.

내가 '좋은 단순한 작은 예'라고 말했을 때 나는 30MB의 데이터를 의미하지는 않았지만 확실한 문제를 나타낼 필요가 없습니다. 게시 할 때 예제는 간단하고 작은 예를 만들고이를 사용합니다. 나는 당신의 다른 파일을 다운로드하는 것을 귀찮게하지 않았습니다.

/BitsPerComponent 16을 설정할 수 없습니다. PostScript는 구성 요소 당 16 비트를 지원하지 않습니다.

+0

그러나 모든 16 비트 값의 최상위 바이트를 버려도 출력 품질이 떨어지지 않습니까? – Pranjal

+0

음, 그래, 분명히. 요점은 이미지 데이터에 실제로 잘못된 것이 없음을 보여주는 것이 었습니다. 문제는 단순히 ** PostScript 이미지에 16 BitsPerComponent가 포함되어 있다고 선언 할 수 없다는 것입니다. 따라서이를 처리하려면 색상 데이터를 다운 샘플링해야합니다. 위에서 설명한 것처럼 (단순하게) C, 또는 PostScript 프로그램에서 프로그램에서이 작업을 수행 할 수 있습니다. – KenS

+0

효과가있었습니다. 고맙습니다. 나는 포스트 스크립트에 대해 어떻게 많이 아십니까? – Pranjal