123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- /*
- * 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 librararies 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,
- register 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,
- register 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
|