|
|
1.1 ! root 1: %!PS-Adobe-2.0 EPSF-2.0 ! 2: %%Title: Compositing.eps ! 3: %%Creator: NeXT ! 4: %%Pages: 0 1 ! 5: %%BoundingBox: 0 0 360 772 ! 6: %%DocumentFonts: Helvetica ! 7: %%EndComments ! 8: ! 9: ! 10: % A simple demo of the various compositing modes on the ! 11: % NeXT computer. Change the alpha and gray values (below) ! 12: % and the source and destination draw procedures if you wish ! 13: % to experiment further. ! 14: ! 15: /thisGstate gstate def ! 16: ! 17: % Change the following for experimentation purposes... ! 18: ! 19: /sourceGray 0.333 def ! 20: /sourceAlpha 1.0 def ! 21: /destGray 0.667 def ! 22: /destAlpha 1.0 def ! 23: ! 24: % Some other parameters that probably need not be changed ! 25: ! 26: /fontSize 12 def ! 27: /sourceX 40 def /sourceY 10 def ! 28: /destX 200 def /destY 10 def ! 29: /width 120 def /height 32 def ! 30: /titleOffset height 4 add def ! 31: /opY destY height add fontSize add 20 add def ! 32: /opYDelta height fontSize add 10 add def ! 33: /opX 115 def ! 34: ! 35: % Font ! 36: ! 37: /Helvetica findfont fontSize scalefont setfont ! 38: ! 39: % Procedure to draw the destination; change this for different images ! 40: ! 41: /drawDest { ! 42: 1.0 setgray 0.0 setalpha ! 43: destX destY width height rectfill ! 44: newpath ! 45: destX width add destY moveto ! 46: 0 height rlineto ! 47: width neg 0 rlineto ! 48: closepath ! 49: destGray setgray ! 50: destAlpha setalpha ! 51: fill ! 52: destX destY titleOffset add moveto ! 53: 0.0 setgray 1.0 setalpha (Destination) show ! 54: 0 setlinewidth destX destY width height rectstroke ! 55: } def ! 56: ! 57: % Procedure to draw the source; changing this might be fun as well ! 58: ! 59: /drawSource { ! 60: 1.0 setgray 0.0 setalpha ! 61: sourceX sourceY width height rectfill ! 62: newpath ! 63: sourceX sourceY moveto ! 64: 0 height rlineto ! 65: width 0 rlineto ! 66: closepath ! 67: sourceGray setgray ! 68: sourceAlpha setalpha ! 69: fill ! 70: sourceX sourceY titleOffset add moveto ! 71: 0.0 setgray 1.0 setalpha (Source) show ! 72: 0 setlinewidth sourceX sourceY width height rectstroke ! 73: } def ! 74: ! 75: % Procedure to perform one compositing operator ! 76: ! 77: /showComp { % name destx desty operator showComp ! 78: /op exch def ! 79: /dy exch def ! 80: /dx exch def ! 81: ! 82: % Bring the destination picture over ! 83: destX destY width height thisGstate dx dy Copy composite ! 84: ! 85: % Composite the source on top of it ! 86: sourceX sourceY width height thisGstate dx dy op composite ! 87: ! 88: % Write the name ! 89: dx dy titleOffset add moveto ! 90: 0.0 setgray 1.0 setalpha show ! 91: 0 setlinewidth dx dy width height rectstroke ! 92: } def ! 93: ! 94: drawDest ! 95: drawSource ! 96: ! 97: /compositeOps [(Copy) (Clear) (Sover) (Dover) (Sin) (Din) ! 98: (Sout) (Dout) (Satop) (Datop) (Xor) (PlusD) (PlusL)] def ! 99: ! 100: ! 101: % Run in a loop and do a composite with each of the above ! 102: % operators... ! 103: ! 104: /curX opX def ! 105: /curY opY def ! 106: ! 107: 0 1 12 { ! 108: compositeOps exch get dup % Now we have two strings ! 109: cvx exec curX curY 3 -1 roll % (name) x y op ! 110: showComp ! 111: /curY curY opYDelta add def ! 112: } for
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.