Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* Copyright (C) 1997 Aladdin Enterprises.  All rights reserved.
2
 
3
  This software is provided AS-IS with no warranty, either express or
4
  implied.
5
 
6
  This software is distributed under license and may not be copied,
7
  modified or distributed except as expressly authorized under the terms
8
  of the license contained in the file LICENSE in this distribution.
9
 
10
  For more information about licensing, please refer to
11
  http://www.ghostscript.com/licensing/. For information on
12
  commercial licensing, go to http://www.artifex.com/licensing/ or
13
  contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14
  San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15
*/
16
 
17
/* $Id: gxalpha.h,v 1.4 2002/02/21 22:24:52 giles Exp $ */
18
/* Internal machinery for alpha channel support */
19
 
20
#ifndef gxalpha_INCLUDED
21
#  define gxalpha_INCLUDED
22
 
23
/*
24
 * As discussed in the classic Porter & Duff paper on compositing,
25
 * supporting alpha channel properly involves premultiplying color values
26
 * that are associated with non-unity alpha values.  After considerable
27
 * thrashing around trying to read between the lines of the spotty NeXT
28
 * documentation, we've concluded that the correct approach is to
29
 * premultiply towards whatever the color value 0 represents in the device's
30
 * native color space: black for DeviceGray and DeviceRGB (displays and some
31
 * file formats), white for DeviceCMYK (color printers), with a special hack
32
 * for monochrome printers TBD.  This makes things very easy internally, at
33
 * the expense of some inconsistency at the boundaries.
34
 *
35
 * For the record, the only places apparently affected by this decision
36
 * are the following:
37
 *      - alphaimage, if it doesn't assume premultiplication (see below)
38
 *      - readimage
39
 *      - The cmap_rgb_alpha_ procedures in gxcmap.c
40
 *      - [color]image, if they are supposed to use currentalpha (see below)
41
 *      - The compositing code in gsalphac.c
42
 *
43
 * The NeXT documentation also is very unclear as to how readimage,
44
 * alphaimage, and [color]image are supposed to work.  Our current
45
 * interpretation is the following:
46
 *
47
 *      - readimage reads pixels exactly as the device stores them
48
 *      (converted into DeviceGray or DeviceRGB space if the device
49
 *      uses a palette).  Pixels with non-unity alpha come out
50
 *      premultiplied, however the device stores them.
51
 *
52
 *      - alphaimage assumes the pixels are premultiplied as appropriate
53
 *      for the relevant color space.  This makes alphaimage and
54
 *      readimage complementary, i.e., the output of readimage is
55
 *      suitable as the input of alphaimage.
56
 *
57
 *      - [color]image disregard currentalpha, and treat all input as
58
 * opaque (alpha = 1).  */
59
/*
60
 * Just in case we ever change our minds about the direction of
61
 * premultiplication, uncommenting the following preprocessor definition is
62
 * supposed to produce premultiplication towards white.
63
 */
64
/*#define PREMULTIPLY_TOWARDS_WHITE */
65
 
66
#endif /* gxalpha_INCLUDED */