📄 image.h
字号:
#ifndef __IMAGE_H_
#define __IMAGE_H_
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
/* Some of the code are from elsewhere. The PGM routines are taken from
* G. Daivs code.
*
* Mow-Song, Ng 2/9/2002
* msng@mmu.edu.my
* http://www.pesona.mmu.edu.my/~msng
*
* I do not claim copyright to the code, but if you use them or modify them,
* please drop me a mail.
*
*/
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*
* $LOG
* ----
*
*
* $TODO
* ----
* - add color image format
* - add other file format (lofty dreams ;-)
*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <assert.h>
#include "memchk.h"
#include "global.h"
/* external dependencies */
#include "mem.h"
#ifndef MAX_GREY
#define MAX_GREY 255
#endif
#ifndef MIN_GREY
#define MIN_GREY 0
#endif
typedef struct IMAGESTRUCT{
int ysize;
int xsize;
void *extraData; /* pointer to additional data */
unsigned char **pixel;
unsigned char *pixelLinear;
} IMAGE, *PIMAGE;
typedef struct LIMAGESTRUCT{
int ysize;
int xsize;
void *extraData; /* pointer to additional data */
int **pixel;
int *pixelLinear;
} LIMAGE, *PLIMAGE;
typedef struct FIMAGESTRUCT{
int ysize;
int xsize;
void *extraData; /* pointer to additional data */
double **pixel;
double *pixelLinear;
} FIMAGE, *PFIMAGE;
/* function prototypes */
/* 8 bit image */
PIMAGE ReadRawGreyFile(int xsize, int ysize, char *filename);
int WriteRawGreyFile(PIMAGE pimage, char *filename);
int ImageInitialize(int XSize, int YSize, PIMAGE pimage);
PIMAGE ImageAlloc(int XSize, int YSize);
int ImageBufferAlloc(PIMAGE pimage);
void ImageBufferFree(PIMAGE pimage);
void ImageFree(PIMAGE pimage);
int CopyImage(PIMAGE pimageDest, PIMAGE pimageSrc);
int SetImage(PIMAGE pimageSrc, unsigned char val);
int ImageDynamicRange(PIMAGE pimage, unsigned char *MaxPixel, unsigned char *MinPixel);
PFIMAGE ReadRawGreyFileToFloat(int xsize, int ysize, char *filename);
int WriteFloatToRawGreyFile(PFIMAGE pfimage, char *filename);
/* 32 bit image */
PLIMAGE ReadRaw32File(int xsize, int ysize, char *filename);
int WriteRaw32File(PLIMAGE plimage, char *filename);
int LImageInitialize(int XSize, int YSize, PLIMAGE plimage);
PLIMAGE LImageAlloc(int XSize, int YSize);
int LImageBufferAlloc(PLIMAGE plimage);
void LImageBufferFree(PLIMAGE plimage);
void LImageFree(PLIMAGE plimage);
int CopyLImage(PLIMAGE plimageDest, PLIMAGE plimageSrc);
/* floating point image */
PFIMAGE ReadRawFloatFile(int xsize, int ysize, char *filename);
int WriteRawFloatFile(PFIMAGE pfimage, char *filename);
int FImageInitialize(int XSize, int YSize, PFIMAGE pfimage);
PFIMAGE FImageAlloc(int XSize, int YSize);
int FImageBufferAlloc(PFIMAGE pfimage);
void FImageBufferFree(PFIMAGE pfimage);
void FImageFree(PFIMAGE pfimage);
int CopyFImage(PFIMAGE pfimageDest, PFIMAGE pfimageSrc);
/* Processing */
PFIMAGE Average2x2Image(PIMAGE pimageSrc, int type);
PFIMAGE Average3x3Image(PIMAGE pimageSrc, int type);
PFIMAGE Average3x3ImageFilter0(PIMAGE pimageSrc, int type);
/* Conversion */
int CopyFImageToImage(PIMAGE pimageDest, PFIMAGE pfimageSrc);
int CopyImageToFImage(PFIMAGE pfimageDest, PIMAGE pimageSrc);
/* PGM */
PIMAGE ReadPGM(char *PGMFileName);
PFIMAGE ReadPGMToFloat(char *PGMFileName);
int WritePGM(PIMAGE pimage, char *PGMFileName);
int WriteFloatToPGM(PFIMAGE pfimage, char *PGMFileName);
unsigned int PGMGetVal (FILE* infile);
void PGMSkipComments(FILE* infile, unsigned char *ch);
/* Comparison */
double ImageCompareMSE(PIMAGE pimage1, PIMAGE pimage2);
double ImageComparePSNR(PIMAGE pimage1, PIMAGE pimage2);
double FImageCompareMSE(PFIMAGE pfimage1, PFIMAGE pfimage2);
double FImageComparePSNR(PFIMAGE pfimage1, PFIMAGE pfimage2);
/* color conversion */
void ycc2rgb(double y,double cb, double cr, double *r, double *g, double *b);
void rgb2ycc(double r, double g, double b, double *y, double *cb, double *cr);
/* bicubic interpolation */
PIMAGE RescaleImage(PIMAGE pimageSrc, int newWidth, int newHeight, double zeroVal);
/* Error handler */
void ImageError(char *fmt, ...);
void ImageWarning(char *fmt, ...);
#endif
/* image.h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -