% $Header: /cvsroot/html2ps/postscript/image.ps,v 1.1 2005/12/18 07:21:38 Konstantin Exp $ /image-create { % => Mask Image Init SY SX << >> dup /SX 3 index put dup /SY 4 index put dup /Init 5 index put dup /Image 6 index put dup /Mask 7 index put exch pop exch pop exch pop exch pop exch pop } def /image-show { % => W H Image % Check if image is transparent dup /Mask get /null eq { % => W H Image 2 index 2 index % => W H Image W H 2 index /SX get 3 index /SY get 4 index /Image get 5 index /Init get % => W H Image W H SX SY Image Init show-image % => W H Image } { 2 index 2 index % => W H Image W H 2 index /SX get 3 index /SY get 4 index /Mask get 5 index /Image get 6 index /Init get % => W H Image W H SX SY Mask Image Init show-transparent-image } ifelse % => W H Image pop pop pop } def /image-show-simple { % => Scale Y X Image 1 index 3 index moveto % => Scale Y X Image dup /SX get 4 index mul 1 index /SY get 5 index mul % => Scale Y X Image W H 2 index image-show % => Scale Y X Image pop pop pop pop } def /image-show-repeat-x { % => Scale YOffset XOffset Right Width Y X Image dup /SX get 8 index mul 1 index /SY get 9 index mul % => Scale YOffset XOffset Right width Y X Image W H % Fill part to the right 3 index % => Scale YOffset XOffset Right width Y X Image W H CX { % => Scale YOffset XOffset Right width Y X Image W H CX dup 8 index ge { exit } if dup 6 index moveto % => Scale YOffset XOffset Right width Y X Image W H CX 2 index 2 index 5 index image-show % => Scale YOffset XOffset Right width Y X Image W H CY 6 index add % => Scale YOffset XOffset Right width Y X Image W H CY } loop pop % Fill part to the left 3 index { % => Scale YOffset XOffset Right width Y X Image W H CX dup 7 index add 5 index 10 index sub lt { exit } if dup 7 index sub 6 index moveto % => Scale YOffset XOffset Right width Y X Image W H CX 2 index 2 index 5 index image-show % => Scale YOffset XOffset Right width Y X Image W H CX 6 index sub % => Scale YOffset XOffset Right width Y X Image W H CX } loop pop pop pop pop pop pop pop pop pop pop pop } def /image-show-repeat-y { % => Scale YOffset XOffset Bottom height Y X Image dup /SX get 8 index mul 1 index /SY get 9 index mul % => Scale YOffset XOffset Bottom height Y X Image W H % Fill part to the bottom 4 index % => Scale YOffset XOffset Bottom height Y X Image W H CY { % => Scale YOffset XOffset Bottom height Y X Image W H CY 6 index 1 index add 8 index le { exit } if 4 index 1 index moveto % => Scale YOffset XOffset Bottom height Y X Image W H CY 2 index 2 index 5 index image-show % => Scale YOffset XOffset Bottom height Y X Image W H CY 6 index sub % => Scale YOffset XOffset Bottom height Y X Image W H CY } loop pop % Fill part to the top 4 index { % => Scale YOffset XOffset Bottom height Y X Image W H CY 6 index 1 index exch sub 10 index 7 index add ge { exit } if 4 index 1 index moveto % => Scale YOffset XOffset Bottom height Y X Image W H CY 2 index 2 index 5 index image-show % => Scale YOffset XOffset Bottom height Y X Image W H CY 6 index add % => Scale YOffset XOffset Bottom height Y X Image W H CY } loop pop pop pop pop pop pop pop pop pop pop pop } def /image-show-repeat-xy { % => Scale YOffset XOffset Bottom Right Height Width Y X Image dup /SX get 10 index mul 1 index /SY get 11 index mul % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H % Fill bottom-right quadrant 4 index % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY { dup 8 index add 10 index le { exit } if % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY 4 index % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY CX { dup 10 index ge { exit } if dup 2 index moveto 3 index 3 index 6 index image-show 7 index add } loop % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY CX pop 7 index sub } loop % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY pop % Fill bottom-left quadrant 4 index % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY { dup 8 index add 10 index le { exit } if % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY 4 index % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY CX { dup 8 index add 6 index 13 index sub le { exit } if dup 2 index moveto 3 index 3 index 6 index image-show 7 index sub } loop % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY CX pop 7 index sub } loop % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY pop % Fill top-right quadrant 4 index % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY { dup 6 index 13 index add gt { exit } if % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY 4 index % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY CX { dup 10 index gt { exit } if dup 2 index moveto 3 index 3 index 6 index image-show 7 index add } loop % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY CX pop 7 index add } loop % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY pop % Fill top-left quadrant 4 index % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY { dup 6 index 13 index add ge { exit } if % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY 4 index % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY CX { dup 8 index add 6 index 13 index sub le { exit } if dup 2 index moveto 3 index 3 index 6 index image-show 7 index sub } loop % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY CX pop 7 index add } loop % => Scale YOffset XOffset Bottom Right Height Width Y X Image W H CY pop pop pop pop pop pop pop pop pop pop pop pop pop } def /show-image { % => W H W H Samples InitFunc exec % => W H W H Samples gsave matrix % => W H W H Samples Matr currentpoint % => W H W H Samples Matr X Y translate % => W H W H Samples Matr' 5 index 4 index div % => W H W H Samples Matr' KX 5 index 4 index div neg % => W H W H Samples Matr' KX KY scale % => W H W H Samples Matr'' 0 3 index neg % => W H W H Samples Matr'' 0 -H(px) translate % => W H W H Samples Matr << /ImageType 1 /Width 7 index /Height 8 index /BitsPerComponent 8 /Decode [0 1 0 1 0 1] /ImageMatrix 12 index /DataSource 15 index >> image grestore pop pop pop pop pop pop } def /show-transparent-image { % => W H W H Mask Samples InitFunc exec % => W H W H Mask Samples gsave matrix % => W H W H Mask Samples Matr currentpoint % => W H W H Mask Samples Matr X Y translate % => W H W H Mask Samples Matr' 6 index 5 index div % => W H W H Mask Samples Matr' KX 6 index 5 index div neg % => W H W H Mask Samples Matr' KX KY scale % => W H W H Mask Samples Matr'' 0 4 index neg % => W H W H Mask Samples Matr'' 0 -H(px) translate % => W H W H Mask Samples Matr % As support of type 3 images in ps2pdf is bad, we'll use this workaround ps2pdf-transparency-hack { << /ImageType no-transparency-output { 1 } { 4 } ifelse /Width 8 index /Height 9 index /BitsPerComponent 8 /Decode [0 1 0 1 0 1] /ImageMatrix 12 index /DataSource 15 index /MaskColor [0 0 0] >> } { << /ImageType 3 /InterleaveType 3 /DataDict << /ImageType 1 /Width 14 index /Height 15 index /BitsPerComponent 8 /Decode [0 1 0 1 0 1] /ImageMatrix 18 index /DataSource 21 index >> /MaskDict << /ImageType 1 /Width 16 index /Height 17 index /BitsPerComponent 1 /Decode [0 1] /ImageMatrix 20 index /DataSource 24 index >> >> } ifelse image grestore pop pop pop pop pop pop pop } def