gecko-dev/include/libcnv.h
1998-03-28 02:44:41 +00:00

210 lines
5.9 KiB
C

/* -*- 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.
*/
//"libcnv.h"
#ifndef _LIBCNV_H
#define _LIBCNV_H
#ifndef _IMAGE_CONVERT
#error _IMAGE_CONVERT SYMBOL NEEDED BEFORE INCLUSION
#endif /*_IMAGE_CONVERT*/
#ifndef __cplusplus
typedef unsigned char BYTE;
typedef uint32 DWORD;
#endif
#include "xp_core.h"/*defines of int32 ect*/
#include "xp_file.h"
#include "xp_mem.h"/*XP_HUGE*/
#define MAXIMAGEPATHLEN 255
typedef enum
{
CONV_CANCEL,
CONV_OK,
CONVERR_INVALIDSOURCE,
CONVERR_INVALIDDEST,
CONVERR_INVALIDFILEHEADER,
CONVERR_INVALIDIMAGEHEADER,
CONVERR_INVALIDBITDEPTH,
CONVERR_INVALIDCOLORMAP,
CONVERR_BADREAD,
CONVERR_OUTOFMEMORY,
CONVERR_JPEGERROR,
CONVERR_COMPRESSED,
CONVERR_BADPLANES,
CONVERR_BADWRITE,
CONVERR_INVALIDPARAMS,
CONVERR_UNKNOWN,
NUM_CONVERR
}CONVERT_IMAGERESULT;
typedef BYTE * CONVERT_IMG_ROW;
typedef CONVERT_IMG_ROW * CONVERT_IMG_ARRAY;
typedef enum
{
conv_unknown,
conv_png,
conv_jpeg,
conv_bmp,
conv_pict,
conv_xpm,
conv_rgb,
conv_plugin
}convimgenum;
typedef struct tagCONVERT_IMG_STREAM
{
XP_HUGE_CHAR_PTR m_mem;
FILE *m_file;/*used only with type 0 -must allready be opened for read or write does not use current index ect.*/
int16 m_type;/*0=CONVERT_FILE 1=CONVERT_MEMORY*/
DWORD m_streamsize;/* 0== unlimited */
DWORD m_currentindex;
}CONVERT_IMG_STREAM;
/*Sent in a BITMAP structure*/
#define CONVERT_MEMORY 1
#define CONVERT_FILE 0
typedef struct tagCONVERT_IMGCONTEXT CONVERT_IMGCONTEXT;
typedef struct tagCONVERT_IMG_INFO CONVERT_IMG_INFO;
typedef CONVERT_IMAGERESULT (*CONVERT_DIALOGIMAGECALLBACK)(CONVERT_IMGCONTEXT *input,
CONVERT_IMGCONTEXT *outputarray,
CONVERT_IMG_INFO *imginfo,
int16 numoutput,
CONVERT_IMG_ARRAY imagearray);
typedef CONVERT_IMAGERESULT (*CONVERT_COMPLETECALLBACK)(CONVERT_IMGCONTEXT *outputarray,int16 p_numoutputs,void *hook);
typedef void (*CONVERT_BUFFERCALLBACK)(void *);/*j_common_ptr);*/
typedef struct tagCONVERT_CALLBACKS
{
CONVERT_DIALOGIMAGECALLBACK m_dialogimagecallback;
CONVERT_BUFFERCALLBACK m_displaybuffercallback;
CONVERT_COMPLETECALLBACK m_completecallback;
}CONVERT_CALLBACKS;
typedef struct tagCONVERT_IMGCONTEXT
{
convimgenum m_imagetype;
CONVERT_IMG_STREAM m_stream;/*used with m_streamtype 1,2*/
int16 m_quality;
char m_filename[MAXIMAGEPATHLEN];/*will not be used to open FILE *. used for output. maybe in future will open file?*/
CONVERT_CALLBACKS m_callbacks;
#ifdef XP_OS2
XP_OS2_ARG(void *m_parentwindow);/*used for callbacks to bring up dialog boxes. void * = CWnd *for Windows*/
#else
XP_WIN_ARG(void *m_parentwindow);/*used for callbacks to bring up dialog boxes. void * = CWnd *for Windows*/
#endif
void *m_pMWContext;//used for callbacks to insert the image. and for plugins
}CONVERT_IMGCONTEXT;
typedef struct tagCONVERT_IMG_INFO
{
BYTE *m_colormap;
int16 m_numcolorentries;
uint16 m_X_density;
uint16 m_Y_density;
int16 m_density_unit;
int16 m_in_color_space;
int16 m_input_components;
int16 m_data_precision;
int16 m_image_width;/*pixel width*/
int16 m_image_height;/*pixel_height*/
int16 m_bitsperpixel;
int16 m_row_width;/*width in bytes*/
int16 m_stride; /*row_width-(pixel_width*bpp)/8 */
DWORD m_image_size; /*informational purposes*/
}CONVERT_IMG_INFO;
#ifdef __cplusplus
extern "C"
{
#endif
/****************************/
/*API CALLS AND DECLARATIONS*/
/****************************/
/*converts input to p_numoutput many outputs*/
/*p_outpuffilenames must be a PREALLOCATED array of char *s at least p_numoutputs char *s these pointers will
point to output filenames that YOU will be responsible to destroy!
you may pass in null for p_outputfilenames and it wil*/
CONVERT_IMAGERESULT convert_stream2image(CONVERT_IMGCONTEXT p_input,CONVERT_IMG_INFO *p_imageinfo,int16 p_numoutputs,char **p_outputfilenames);
/*quantize_pixels will change the imagearray to have only maxcolors distinct values*/
CONVERT_IMAGERESULT convert_quantize_pixels(CONVERT_IMG_ARRAY imagearray,int16 imagewidth,int16 imageheight,int16 maxcolorvalue);
/*given a imagecontext, it will tell you if it is a png,bmp,gif ect*/
convimgenum select_file_type (CONVERT_IMGCONTEXT * p_input);
/****************************/
/*END API CALLS AND DECLARATIONS*/
/****************************/
/****************************/
/*STREAM DECLARATIONS*/
/****************************/
/*CONV_IMG_FREAD taken from JPEG libraries for independence from common header file*/
#define CONV_IMG_FREAD(file,buf,sizeofbuf) \
((size_t) fread((void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file)))
#define ReadOK(file,buffer,len) (CONV_IMG_FREAD(file,buffer,len) == ((size_t) (len)))
int16 read_mem_stream(CONVERT_IMG_STREAM *p_stream,void *p_dest,uint16 p_bytecount);
BYTE read_mem_stream_byte(CONVERT_IMG_STREAM *p_stream);
int16 read_param(CONVERT_IMG_STREAM *p_input,void *p_dest,uint16 p_bytecount);
BYTE read_param_byte(CONVERT_IMG_STREAM *p_input);
/****************************/
/*END STREAM DECLARATIONS*/
/****************************/
#ifdef __cplusplus
}
#endif
#endif