home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
- /*
- * ni_pixmp.h --- Cross platform pixmap data structure.
- * $Id: ni_pixmp.h,v 3.1 1998/03/28 03:34:58 ltabb Exp $
- */
-
-
- #ifndef _NI_PIXMAP_H
- #define _NI_PIXMAP_H
- #include "xp_mem.h"
- /************** Colorimetry/Gamma Correction Information. ********************
- * This doesn't need to be implemented initially, but it's here for future *
- * usage. */
-
- /* The chrominance part of a CIE xyY color specification */
- typedef struct CIEchroma {
- float x;
- float y;
- } CIEchroma;
-
-
- /* Define a device-independent color space using the white point and
- primary colors of a gamut formed by RGB tristimulus values. */
- typedef struct NI_RGBColorSpace {
- CIEchroma white_point;
- CIEchroma primary_red;
- CIEchroma primary_green;
- CIEchroma primary_blue;
- } NI_RGBColorSpace;
-
-
- typedef struct NI_ColorSpec {
- double gamma;
- NI_RGBColorSpace rgb_colorspace;
- } NI_ColorSpec;
-
-
- /***************** Colorspace and Colormap Information ***********************/
-
- /* Possible colorspace types. */
- typedef enum _NI_ColorSpaceType
- {
- NI_TrueColor = 0x01, /* RGB data. */
- NI_PseudoColor = 0x02, /* Indexed data. */
- NI_GreyScale = 0x04 /* Greyscale data. */
- } NI_ColorSpaceType;
-
-
- /* RGB bit allocation and offsets. */
- typedef struct _NI_RGBBits {
- uint8 red_bits; /* Number of bits assigned to red channel. */
- uint8 red_shift; /* Offset for red channel bits. */
- uint8 green_bits; /* Number of bits assigned to green channel. */
- uint8 green_shift; /* Offset for green channel bits. */
- uint8 blue_bits; /* Number of bits assigned to blue channel. */
- uint8 blue_shift; /* Offset for blue channel bits. */
- } NI_RGBBits;
-
-
- /* An indexed RGB triplet. */
- typedef struct _NI_IRGB {
- uint8 index;
- uint8 red, green, blue;
- } NI_IRGB;
-
-
- /* A RGB triplet representing a single pixel in the image's colormap
- (if present.) */
- typedef struct _NI_RGB
- {
- uint8 red, green, blue, pad; /* Windows requires the fourth byte &
- many compilers pad it anyway. */
- uint16 hist_count; /* Histogram frequency count. */
- } NI_RGB;
-
-
- /* Colormap information. */
- typedef struct _NI_ColorMap {
- int32 num_colors; /* Number of colors in the colormap.
- A negative value can be used to denote a
- possibly non-unique set. */
- NI_RGB *map; /* Colormap colors. */
- uint8 *index; /* NULL, if map is in index order. Otherwise
- specifies the indices of the map entries. */
- void *table; /* Lookup table for this colormap. Private to
- the Image Library. */
- } NI_ColorMap;
-
-
- /* Special purpose flags for OS-specific problems. */
- typedef enum {
- WIN95_ROUNDING = 0x01 /* Windows 95 color quantization bug. */
- } NI_OSFlags;
-
-
- /* Colorspace information. */
- typedef struct _NI_ColorSpace {
- NI_ColorSpaceType type; /* NI_Truecolor, NI_Pseudocolor or
- NI_Greyscale. */
-
- /* The dimensions of the colorspace. */
- union {
- NI_RGBBits rgb; /* For TrueColor. */
- uint8 index_depth; /* For PseudoColor and GreyScale. */
- } bit_alloc; /* Allocation of bits. */
- uint8 pixmap_depth; /* Total bit depth (including alpha or pad.) */
-
- /* Colormap information. This may be used for one of three purposes:
- - If the colorspace belongs to a PseudoColor source image, then the
- colormap represents the mapping from the source image indices to
- the corresponding RGB components.
- - If the colorspace belongs to a TrueColor source image, then a
- colormap may be provided as a suggested palette for displaying the
- image on PseudoColor displays.
- - If the colorspace belongs to a PseudoColor Display Front End or a
- destination image for a PseudoColor Display Front End, then the
- colormap represents the mapping from the display's palette indices
- to the corresponding RGB components. */
- NI_ColorMap cmap;
-
- /* Image Library private data for this colorspace. */
- void *private_data;
-
- /* Special purpose flags for OS-specific problems. */
- uint8 os_flags; /* Flags are of type NI_OSFlags. */
-
- /* Reference counter. */
- uint32 ref_count;
- } NI_ColorSpace;
-
-
- /* A pixmap's header information. */
- typedef struct _NI_PixmapHeader
- {
- /* Size. */
- uint32 width; /* Width. */
- uint32 height; /* Height. */
- uint32 widthBytes; /* width * depth / 8. May be aligned for
- optimizations. */
-
- /* Colorspace. */
- NI_ColorSpace *color_space; /* Colorspace and colormap information. */
-
- /* Transparency. */
- NI_IRGB *transparent_pixel; /* The image's transparent pixel
- (if present.) */
- uint8 alpha_bits; /* Number of bits assigned to alpha channel. */
- uint8 alpha_shift; /* Offset for alpha channel bits. */
- int32 is_interleaved_alpha; /* Is alpha channel interleaved with
- image data? */
-
- /* Gamma/color correction. */
- NI_ColorSpec color_spec;
- } NI_PixmapHeader;
-
-
- /* A pixmap. */
- typedef struct _NI_Pixmap
- {
- NI_PixmapHeader header; /* Header information. */
- void XP_HUGE *bits; /* Pointer to the bits. */
- void *client_data; /* Pixmap-specific data opaque to the Image
- Library e.g. display front-ends which
- support scaling may use this to store the
- actual size at which the image is to be
- displayed. */
- } NI_Pixmap;
-
- #endif /* _NI_PIXMAP_H */
-