294 lines
12 KiB
C
294 lines
12 KiB
C
/*
|
|
* CDE - Common Desktop Environment
|
|
*
|
|
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
|
|
*
|
|
* These libraries and programs are free software; you can
|
|
* redistribute them and/or modify them under the terms of the GNU
|
|
* Lesser General Public License as published by the Free Software
|
|
* Foundation; either version 2 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* These libraries and programs are distributed in the hope that
|
|
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
* PURPOSE. See the GNU Lesser General Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with these libraries and programs; if not, write
|
|
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
* Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
/* $XConsortium: ilconvert.h /main/3 1995/10/23 15:44:19 rswiston $ */
|
|
/**---------------------------------------------------------------------
|
|
***
|
|
*** (c)Copyright 1991 Hewlett-Packard Co.
|
|
***
|
|
*** RESTRICTED RIGHTS LEGEND
|
|
*** Use, duplication, or disclosure by the U.S. Government is subject to
|
|
*** restrictions as set forth in sub-paragraph (c)(1)(ii) of the Rights in
|
|
*** Technical Data and Computer Software clause in DFARS 252.227-7013.
|
|
*** Hewlett-Packard Company
|
|
*** 3000 Hanover Street
|
|
*** Palo Alto, CA 94304 U.S.A.
|
|
*** Rights for non-DOD U.S. Government Departments and Agencies are as set
|
|
*** forth in FAR 52.227-19(c)(1,2).
|
|
***
|
|
***-------------------------------------------------------------------*/
|
|
|
|
#ifndef ILCONVERT_H
|
|
#define ILCONVERT_H
|
|
|
|
#ifndef IL_H
|
|
#include "il.h"
|
|
#endif
|
|
|
|
/* Include file for /ilc/ilconvert.c and conversion code referenced by it;
|
|
only those files should include this file.
|
|
*/
|
|
|
|
/* Values for ilConvertRec.srcFormatCode.
|
|
Format converters (those which would have ilConvertRec.pDstDes null
|
|
and ilConvertRec.pDstFormat non-null) MUST set IL_DONT_CHECK_STD_FORMAT.
|
|
Descriptor converters must set another code, which identifies the
|
|
required src format, as follows (fields not named are not checked):
|
|
|
|
IL_STD_FORMAT_BIT src format is IL_FORMAT_BIT: rowBitAlign
|
|
== 32; bitsPerSample[0] == 1.
|
|
IL_STD_FORMAT_BYTE src format is IL_FORMAT_BYTE:
|
|
bitsPerSample[0] == 8.
|
|
IL_STD_FORMAT_3BYTE_PIXEL src format is IL_FORMAT_3BYTE_PIXEL:
|
|
bitsPerSample[0,1,2] == 8; sampleOrder ==
|
|
IL_SAMPLE_PIXELS
|
|
*/
|
|
#define IL_DONT_CHECK_STD_FORMAT 0
|
|
#define IL_STD_FORMAT_BIT 1
|
|
#define IL_STD_FORMAT_BYTE 2
|
|
#define IL_STD_FORMAT_3BYTE_PIXEL 3
|
|
|
|
/* Standard definition for a conversion filter added by ilConvert().
|
|
Basically the parameter values to be passed to ilAddPipeElement() to
|
|
add a given pipe converter. Some basic rules:
|
|
- the filter must take any stripHeight, and output the same
|
|
- it must not change the height/width of the image
|
|
- pDstDes and pDstFormat in the structure must point to the output
|
|
des/format, or be null if the output des/format is the
|
|
same as the input (can't both be null - that is no conversion!)
|
|
"srcFormatCode" is a code for the required src (input) format to
|
|
this element. See notes above.
|
|
The function "AddElement()" if non-null is called after the pipe
|
|
element is successfully added, as:
|
|
(*AddElement) (<pPrivate from ilAddPipeElement>, pPalette);
|
|
It can be used for example to init the private block with data
|
|
other than what might be done by Init().
|
|
*/
|
|
typedef struct {
|
|
ilError (*CheckFormat)(); /* reserved: MUST BE IL_NPF! */
|
|
unsigned int srcFormatCode; /* see above */
|
|
ilError (*AddElement)(); /* see above */
|
|
const ilImageDes *pDstDes; /* ptr to new des or null */
|
|
const ilImageFormat *pDstFormat; /* ptr to new format or null */
|
|
size_t nBytesPrivate;
|
|
ilError (*Init)();
|
|
ilError (*Cleanup)();
|
|
ilError (*Destroy)();
|
|
ilError (*Execute)();
|
|
} ilConvertRec, *ilConvertPtr;
|
|
|
|
/* Standard definition for a format filter added by ilConvert().
|
|
Basically a subset of an ilConvertRec; see above.
|
|
*/
|
|
typedef struct {
|
|
ilError (*AddElement)(); /* see above */
|
|
unsigned int nBytesPrivate;
|
|
ilError (*Init)();
|
|
ilError (*Cleanup)();
|
|
ilError (*Destroy)();
|
|
ilError (*Execute)();
|
|
} ilFormatRec, *ilFormatPtr;
|
|
|
|
|
|
/* In /ilc/ildither.c : */
|
|
|
|
IL_EXTERN const unsigned int _ilDitherKernel[];
|
|
IL_EXTERN const unsigned short _ilMul8[];
|
|
IL_EXTERN const unsigned short _ilMul4[];
|
|
|
|
|
|
/* Convert from source type (pDes->type) == RGB to Palette.
|
|
pFormat points to the source format; on return, *pFormat is updated
|
|
to the dst format. *pDes ->the src (pipe) des; on return *pDes is the new des.
|
|
*/
|
|
IL_EXTERN ilBool _ilConvertRGBToPalette (
|
|
ilPipe pipe,
|
|
ilPipeInfo *pInfo,
|
|
ilImageDes *pDes,
|
|
ilImageFormat *pFormat,
|
|
int option,
|
|
ilConvertToPaletteInfo *pData
|
|
);
|
|
|
|
/* Dithers using error diffusion to bitonal.
|
|
Input image: IL_DES_GRAY, IL_FORMAT_BYTE.
|
|
Output image: IL_DES_BITONAL, IL_FORMAT_BIT
|
|
*/
|
|
IL_EXTERN ilConvertRec _ilDiffuseGrayToBitonal;
|
|
|
|
/* Convert using a user-supplied threshold.
|
|
Input image: IL_DES_GRAY (either form of blackIsZero), IL_FORMAT_BYTE.
|
|
Output image: IL_DES_BITONAL, IL_FORMAT_BIT
|
|
*/
|
|
IL_EXTERN ilConvertRec _ilThresholdGrayToBitonal;
|
|
|
|
/* In /ilc/ilpalette.c :
|
|
Converts byte palette image to RGB, each a byte
|
|
Input image: uncompressed IL_PALETTE, any # of levels, IL_FORMAT_3BYTE_PIXEL.
|
|
Output image: IL_DES_GRAY, IL_FORMAT_BYTE.
|
|
*/
|
|
IL_EXTERN ilConvertRec _ilPaletteToRGBByte;
|
|
|
|
|
|
/* In /ilc/iltruegray.c :
|
|
Converts rgb image to gray scale.
|
|
Input image: uncompressed IL_RGB, any # of levels, IL_FORMAT_3BYTE_PIXEL.
|
|
Output image: IL_DES_GRAY, IL_FORMAT_BYTE.
|
|
*/
|
|
IL_EXTERN ilConvertRec _ilRGBToGray;
|
|
|
|
/* In /ilc/iltruegray.c :
|
|
Converts gray scale image to rgb.
|
|
Input image: uncompressed IL_GRAY, any # of levels, IL_FORMAT_BYTE.
|
|
Output image: IL_DES_RGB, IL_FORMAT_3BYTE_PIXEL.
|
|
*/
|
|
IL_EXTERN ilConvertRec _ilGrayToRGB;
|
|
|
|
/* In /ilc/ilformat.c :
|
|
Reformats image to change the rowBitAlign only.
|
|
*/
|
|
IL_EXTERN ilFormatRec _ilFormatRowBitAlign;
|
|
|
|
/* Convert 4 to 8 bit or 8 to 4 bit per sample.
|
|
*/
|
|
IL_EXTERN ilFormatRec _ilFormat4To8Bit;
|
|
|
|
IL_EXTERN ilFormatRec _ilFormat8To4Bit;
|
|
|
|
/* Reformat an 8 bit/pixel 3 sample planar image to pixel format.
|
|
*/
|
|
IL_EXTERN ilFormatRec _ilFormat8Bit3PlaneToPixel;
|
|
|
|
/* Reformat an 8 bit/pixel 3 sample pixel image to planar format.
|
|
*/
|
|
IL_EXTERN ilFormatRec _ilFormat8Bit3PixelToPlane;
|
|
|
|
/* In /ilc/ilformat.c :
|
|
Add a conversion filter to the given pipe which converts from the levels
|
|
in "*pPipeDes" (i.e. the levels of the current pipe image) to those in
|
|
"*pDes" (note - only nLevelsPerSample is reference from pDes).
|
|
If failure, declares pipe invalid (which sets error code) and returns false;
|
|
else returns true and "*pInfo", "*pPipeDes" and "*pFormat" are updated
|
|
with the new pipe state info.
|
|
*/
|
|
IL_EXTERN ilBool _ilAddLevelConversionFilter (
|
|
ilPipe pipe,
|
|
ilPipeInfo *pInfo,
|
|
ilImageDes *pPipeDes,
|
|
const ilImageDes *pDes,
|
|
ilImageFormat *pFormat
|
|
);
|
|
|
|
|
|
/* In /ilc/ilinvert.c :
|
|
Add a filter to invert a bitonal or gray image.
|
|
*/
|
|
IL_EXTERN ilBool _ilAddInvertFilter (
|
|
ilPipe pipe,
|
|
ilImageDes *pPipedes,
|
|
ilPipeInfo *pInfo
|
|
);
|
|
|
|
/* In /ilc/ilupsample.c : */
|
|
|
|
/* Attempt to upsample and scale based on "scaleFactor" (0 = no scaling; 1 = double;
|
|
2 = 4x), or return false if it cannot be done with the given pipe image (in which
|
|
case pipe->context->error == 0) or if error occurs (error != 0). Pipe image
|
|
must be decompressed before calling this function.
|
|
*/
|
|
IL_EXTERN ilBool _ilFastUpsample (
|
|
ilPipe pipe,
|
|
ilPipeInfo *pInfo,
|
|
ilImageDes *pDes,
|
|
ilImageFormat *pFormat,
|
|
int scaleFactor
|
|
);
|
|
|
|
/* Upsample and / or convert to gray the pipe image which must be a YCbCr image.
|
|
If "toGray" is true, the Y plane only will be upsampled (or copied) resulting
|
|
in a gray image; else a planar YCbCr image will result.
|
|
If "upSample" is true must upsample; "upSample" and/or "toGray" must be true.
|
|
pFormat points to the source format; on return, *pFormat is updated
|
|
to the dst format, *pDes to the dst descriptor.
|
|
*/
|
|
IL_EXTERN ilBool _ilUpsampleYCbCr (
|
|
ilPipe pipe,
|
|
ilPipeInfo *pInfo,
|
|
ilImageDes *pDes,
|
|
ilImageFormat *pFormat,
|
|
ilBool toGray,
|
|
ilBool upSample
|
|
);
|
|
|
|
/* In /ilc/ilycbcr.c : */
|
|
|
|
/* Subsample the pipe image which must be a fully upsampled YCbCr image.
|
|
pFormat points to the source format; on return, *pFormat is updated
|
|
to the dst format. *pDes to the _destination_ des, i.e. has subsample values.
|
|
*/
|
|
IL_EXTERN ilBool _ilSubsampleYCbCr (
|
|
ilPipe pipe,
|
|
ilPipeInfo *pInfo,
|
|
ilImageDes *pDes,
|
|
ilImageFormat *pFormat
|
|
);
|
|
|
|
/* Convert from source type (pDes->type) == IL_YCBCR to RBB.
|
|
The YCbCr image must already be upsampled.
|
|
pFormat points to the source format; on return, *pFormat is updated
|
|
to the dst format, *pDes to the dst descriptor.
|
|
*/
|
|
IL_EXTERN ilBool _ilConvertYCbCrToRGB (
|
|
ilPipe pipe,
|
|
ilPipeInfo *pInfo,
|
|
ilImageDes *pDes,
|
|
ilImageFormat *pFormat
|
|
);
|
|
|
|
/* Convert from source type (pDes->type) == RGB to YCbCr.
|
|
pFormat points to the source format; on return, *pFormat is updated
|
|
to the dst format. pNewDes points to the dst dest; *pDes to the src (pipe) des;
|
|
on return it is updated to the new descriptor.
|
|
*/
|
|
IL_EXTERN ilBool _ilConvertRGBToYCbCr (
|
|
ilPipe pipe,
|
|
ilPipeInfo *pInfo,
|
|
ilImageDes *pDes,
|
|
const ilImageDes *pNewDes,
|
|
ilImageFormat *pFormat
|
|
);
|
|
|
|
/* Does conversions of some forms of YCbCr to dithered IL_PALETTE.
|
|
Returns "true" if conversion handled, else "false" if not handled or if error.
|
|
The pipe image must be an uncompressed YCbCr image.
|
|
*/
|
|
IL_EXTERN ilBool _ilDitherYCbCr (
|
|
ilPipe pipe,
|
|
ilPipeInfo *pInfo,
|
|
ilImageDes *pDes,
|
|
ilImageFormat *pFormat,
|
|
int option,
|
|
ilConvertToPaletteInfo *pData
|
|
);
|
|
|
|
#endif
|