home *** CD-ROM | disk | FTP | other *** search
/ Freelog Special Freeware 31 / FreelogHS31.iso / PDF / Ghostscript / gs860w32.exe / gs8.60 / lib / gs_devcs.ps < prev    next >
Text File  |  2006-11-22  |  7KB  |  251 lines

  1. %    Copyright (C) 2002 Aladdin Enterprises.  All rights reserved.
  2. % This software is provided AS-IS with no warranty, either express or
  3. % implied.
  4. % This software is distributed under license and may not be copied,
  5. % modified or distributed except as expressly authorized under the terms
  6. % of the license contained in the file LICENSE in this distribution.
  7. % For more information about licensing, please refer to
  8. % http://www.ghostscript.com/licensing/. For information on
  9. % commercial licensing, go to http://www.artifex.com/licensing/ or
  10. % contact Artifex Software, Inc., 101 Lucas Valley Road #110,
  11. % San Rafael, CA  94903, U.S.A., +1(415)492-9861.
  12.  
  13. % $Id: gs_devcs.ps 7216 2006-11-22 01:26:37Z ray $
  14. % Device-specific color space method dictionaries.
  15.  
  16. %
  17. % This file implements the method dictionaries for the Device-specific
  18. % color spaces. See gs_cspace.ps for information.
  19. %
  20. % Note that, because these color spaces are parameter-less, no color
  21. % space validation is required: if we can get to the color space methods,
  22. % we know the color space is legitimate.
  23. %
  24. % The colorspace substitution routines for these color spaces
  25. % (cs_substitute) will fail in a Level 1 system, but this is not a
  26. % problem as .getuseciecolor will always return false for such systems.
  27. %
  28. .currentglobal true .setglobal
  29. .cspace_util begin
  30.  
  31. %
  32. %   <r>  <g>  <b>   rgb_2_gray   <gray>
  33. %
  34. % Convert RGB colors to gray. This includes a special check for
  35. % r == g == b, and avoids roundoff error if this is the case.
  36. %
  37. /rgb_2_gray
  38.   {
  39.     3 copy 1 index eq 3 1 roll eq and
  40.       { pop pop }
  41.       { .11 mul exch .59 mul add exch .3 mul add }
  42.     ifelse
  43.   }
  44. bind def
  45.  
  46. systemdict /..page_default_spaces 3 dict put
  47.  
  48. % <color_space_name> ..includecolorspace -
  49. /..includecolorspace
  50. { % Only includes ones explicitly defined by the document.
  51.   systemdict /..page_default_spaces get 1 index known {
  52.     pop
  53.   } {
  54.     mark exch
  55.     { dup /ColorSpace resourcestatus {
  56.         pop 0 eq {
  57.           systemdict /..page_default_spaces get 1 index //true put
  58.           gsave
  59.           { dup /ColorSpace findresource //_setcolorspace_nosub exec .includecolorspace
  60.           } stopped pop
  61.           grestore
  62.         } if
  63.       } if
  64.     } stopped pop
  65.     cleartomark
  66.   } ifelse
  67. } bind def
  68.  
  69. % <color_space> <color_space_name> cs_substitute_generic <color_space1> <color_space2>
  70. /cs_substitute_generic
  71. { .getuseciecolor
  72.     { NOSUBSTDEVICECOLORS 
  73.         { //..includecolorspace exec dup }
  74.         { /ColorSpace findresource }
  75.       ifelse
  76.     }
  77.     { pop dup }
  78.   ifelse
  79. }
  80. bind def
  81.  
  82. % <color_space> <color_space_name> cs_substitute_DeviceRGB_for_PDFX_or_PDFA <color_space1> <color_space2>
  83. /cs_substitute_DeviceRGB_for_PDFX_or_PDFA
  84. { systemdict /PDFX .knownget not { false } if
  85.   systemdict /PDFA .knownget not { false } if
  86.   or {
  87.     dup /ColorSpace resourcestatus {
  88.       pop pop
  89.     } {
  90.       (Error: Need a /DefaultRGB /ColorSpace resource for generating a PDF/X or PDF/A document.) =
  91.       /cs_substitute_DeviceRGB_for_PDFX_or_PDFA cvx /undefined signalerror
  92.     } ifelse
  93.     /ColorSpace findresource
  94.   } {
  95.     //cs_substitute_generic exec
  96.   } ifelse   
  97. } bind def
  98.  
  99. colorspacedict
  100.  
  101. dup
  102. /DeviceGray
  103.   mark
  104.     /cs_potential_indexed_base true
  105.     /cs_potential_pattern_base true
  106.     /cs_potential_alternate true
  107.     /cs_potential_icc_alternate true
  108.     /cs_get_ncomps //ncomps_1
  109.     /cs_get_range  //get_range_1
  110.     /cs_get_default_color { pop 0.0 } bind
  111.     /cs_get_currentgray //pop_1
  112.     /cs_get_currentrgb { pop dup dup } bind
  113.     /cs_get_currentcmyk { pop 1.0 exch sub 0.0 0.0 0.0 4 -1 roll } bind
  114.     /cs_validate {}
  115.  
  116.     /cs_substitute
  117.       { /DefaultGray //cs_substitute_generic exec
  118.       }
  119.     bind
  120.  
  121.     /cs_prepare {}
  122.     /cs_install { pop 0 .setdevcspace } bind
  123.     /cs_prepare_color //validate_1
  124.     /cs_complete_setcolor //pop_1
  125.   .dicttomark
  126. put
  127.  
  128.  
  129. /DeviceRGB
  130.   mark
  131.     /cs_potential_indexed_base true
  132.     /cs_potential_pattern_base true
  133.     /cs_potential_alternate true
  134.     /cs_potential_icc_alternate true
  135.     /cs_get_ncomps //ncomps_3
  136.     /cs_get_range  //get_range_3
  137.     /cs_get_default_color { pop 0.0 0.0 0.0 } bind
  138.     /cs_get_currentgray { pop //rgb_2_gray exec } bind
  139.     /cs_get_currentrgb //pop_1
  140.  
  141.     % to convert to cmyk use blackgeneration and undercolorremoval
  142.     /cs_get_currentcmyk
  143.       {
  144.         pop
  145.  
  146.         % convert to subtractive (CMY) color space
  147.         3
  148.           { 1.0 exch sub 3 1 roll }
  149.         repeat
  150.  
  151.         % find the minimum (initial k component)
  152.         3 copy
  153.         2
  154.           {
  155.             2 copy gt
  156.               { exch }
  157.             if
  158.             pop
  159.           }
  160.         repeat
  161.  
  162.         % apply undercolorremoval
  163.         dup 5 1 roll currentundercolorremoval exec cvr 4 1 roll
  164.         3
  165.           { 3 index sub //bound_0_1 exec 3 1 roll }
  166.         repeat
  167.  
  168.         % apply blackgeneration
  169.         5 3 roll pop currentblackgeneration exec cvr //bound_0_1 exec
  170.       }
  171.     bind
  172.  
  173.     /cs_validate {}
  174.  
  175.     /cs_substitute
  176.       { /DefaultRGB //cs_substitute_DeviceRGB_for_PDFX_or_PDFA exec
  177.       }
  178.     bind
  179.  
  180.     /cs_prepare {}
  181.     /cs_install { pop 1 .setdevcspace } bind
  182.     /cs_prepare_color //validate_3
  183.     /cs_complete_setcolor //pop_1
  184.   .dicttomark
  185. put
  186.  
  187. end     % .cspace_util
  188. .setglobal
  189.  
  190.  
  191. % Only create the DeviceCMYK color space if setcolorscreen is present
  192. /setcolorscreen where
  193.   { pop }
  194.   { currentfile closefile }
  195. ifelse
  196.  
  197.  
  198. .currentglobal true .setglobal
  199. .cspace_util begin
  200.  
  201. colorspacedict
  202. /DeviceCMYK
  203.   mark
  204.     /cs_potential_indexed_base true
  205.     /cs_potential_pattern_base true
  206.     /cs_potential_alternate true
  207.     /cs_potential_icc_alternate true
  208.     /cs_get_ncomps //ncomps_4
  209.     /cs_get_range  //get_range_4
  210.     /cs_get_default_color { pop 0.0 0.0 0.0 1.0 } bind
  211.  
  212.     /cs_get_currentgray
  213.       { pop 4 1 roll //rgb_2_gray exec add 1.0 exch sub //bound_0_1 exec }
  214.     bind
  215.  
  216.     /cs_get_currentrgb 
  217.       {
  218.         pop
  219.         4 1 roll 3
  220.           { 3 index add  1.0 exch sub //bound_0_1 exec 3 1 roll }
  221.         repeat
  222.         4 -1 roll pop
  223.       }
  224.     bind
  225.  
  226.     /cs_get_currentcmyk //pop_1
  227.  
  228.     /cs_validate {}
  229.  
  230.     /cs_substitute
  231.       { /DefaultCMYK //cs_substitute_generic exec
  232.       }
  233.     bind
  234.  
  235.     /cs_prepare {}
  236.     /cs_install { pop 2 .setdevcspace } bind
  237.     /cs_prepare_color //validate_4
  238.     /cs_complete_setcolor //pop_1
  239.   .dicttomark
  240. put
  241.  
  242. currentdict /..includecolorspace .undef
  243. currentdict /cs_substitute_generic .undef
  244.  
  245. end     % .cspace_util
  246. .setglobal
  247.  
  248.