blob: 4788b7b2c32660bcad3284ad3b99fdcb4a885022 [file] [log] [blame]
/*
* Copyright (c) 1996, 1998, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* This file provides some global definitions needed by the image
* conversion package.
*/
#ifndef IMAGE_GLOBALS_H
#define IMAGE_GLOBALS_H
/* Image Conversion function return codes. */
#define SCALEFAILURE -1
#define SCALENOOP 0
#define SCALESUCCESS 1
/*
* The constants needed to choose from among the many variants of image
* conversion functions that can be constructed with the standard header
* files. The types of input for the image conversion functions are
* broken down into 5 different attributes each with 2 to 4 different
* variants:
*
* SCALING: SCALED or UNSCALED
* INPUT SIZE: BYTEIN (8-bit) or INTIN (32-bit)
* ALPHA: OPAQUE or ALPHA
* ORDER: TDLR or RANDOM
* COLORMODEL: ICM, DCM, DCM8 (8-bits for each component) or ANY
*
* For each attribute, a mask is defined with the "BITS" suffix which
* identifies which bits contain the variation information for that
* particular attribute. The input information should be analyzed and
* characterized for each of the above categories and the appropriate
* bit constants OR'd together to produce a unique constant that
* identifies which conversion function is needed. The reason that
* attributes of the output space are not indicated in the masks is
* that typically only a single output device type needs to be supported
* at a time and so a vector of the functions specific to the necessary
* output device can be constructed at AWT initialization time and then
* indexed into with the constant identifier that characterizes the
* input data, which is only known and constantly varies at run-time.
*/
#define IMGCV_UNSCALED (0 << 0)
#define IMGCV_SCALED (1 << 0)
#define IMGCV_SCALEBITS (1 << 0)
#define IMGCV_BYTEIN (0 << 1)
#define IMGCV_INTIN (1 << 1)
#define IMGCV_INSIZEBITS (1 << 1)
#define IMGCV_OPAQUE (0 << 2)
#define IMGCV_ALPHA (1 << 2)
#define IMGCV_ALPHABITS (1 << 2)
#define IMGCV_TDLRORDER (0 << 3)
#define IMGCV_RANDORDER (1 << 3)
#define IMGCV_ORDERBITS (1 << 3)
#define IMGCV_ICM (0 << 4)
#define IMGCV_DCM (1 << 4)
#define IMGCV_DCM8 (2 << 4)
#define IMGCV_ANYCM (3 << 4)
#define IMGCV_CMBITS (3 << 4)
#define NUM_IMGCV (1 << 6) /* total # of IMGCV variants */
/*
* The structure which holds the image conversion data.
*/
typedef struct {
void *outbuf;
void *maskbuf;
void *fserrors;
} ImgConvertData;
/*
* The standard structure which holds information about the pixels
* used in the output device.
*/
typedef struct {
int grayscale;
int bitsperpixel;
int rOff;
int gOff;
int bOff;
int rScale;
int gScale;
int bScale;
} ImgColorData;
/*
* The private data member attached to a ColorModel which caches
* the information needed to characterize and use a ColorModel
* object on the fly.
*/
typedef struct {
int type;
struct methodblock *mb;
} ImgCMData;
/*
* The standard signature of all of the image conversion functions
* that can be produced with this package of include files.
*/
/*
* FIXME!
*/
typedef int ImgConvertFcn(void *colormodel,
int srcOX, int srcOY, int srcW, int srcH,
void *srcpix, int srcOff, int srcBPP, int srcScan,
int srcTotalWidth, int srcTotalHeight,
int dstTotalWidth, int dstTotalHeight,
ImgConvertData *cvdata, ImgColorData *clrdata);
/*
* The type of the error matrix used in the ordered dithering code.
*/
typedef unsigned char uns_ordered_dither_array[8][8];
typedef char sgn_ordered_dither_array[8][8];
/*
* The function provided for constructing the ordered dithering error
* matrices based on a given quantum (i.e. the amplitude of the maximum
* error values appearing in the matrix which should be the same as the
* distance between adjacent allocated component values in the color cube).
*/
extern void make_uns_ordered_dither_array(uns_ordered_dither_array oda,
int quantum);
extern void make_sgn_ordered_dither_array(char* oda, int errmin, int errmax);
/*
* The function provided for calculating the contents of the ImgCMData
* structure which can be attached to ColorModels to simplify the
* work of characterizing their data.
*/
extern ImgCMData *img_getCMData(void *cmh);
#endif /* IMAGE_GLOBALS_H */