210 строки
5.9 KiB
C
210 строки
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
|
|
|
|
|