2020-09-30 17:17:25 +02:00

102 lines
4.4 KiB
C

/***************************************************************************\
* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *
* THE INFORMATION CONTAINED HEREIN IS PROPRIETARY AND CONFIDENTIAL TO *
* NVIDIA, CORPORATION. USE, REPRODUCTION OR DISCLOSURE TO ANY THIRD PARTY *
* IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORPORATION. *
* *
* Portions: Copyright (C) 1995 Microsoft Corporation. All Rights Reserved.*
* *
* Module: NvImage.h *
* *
*****************************************************************************
* *
* History: *
* Andrei Osnovich 10/03/2000 Created *
* *
\***************************************************************************/
#ifndef _NVIMAGE_H_
#define _NVIMAGE_H_
#ifdef DEFINE_JPEG_TYPES
#include <stdio.h>
#include <string.h>
#include "jpeglib.h"
#else //~DEFINE_JPEG_TYPES
struct jpeg_decompress_struct {
DWORD Pan;
};
typedef BYTE JSAMPLE;
#endif //~DEFINE_JPEG_TYPES
typedef void (__stdcall *SCANLINEPROCESS)(void *, int);
typedef enum _JPEGParameterType_ {
JPEG_WRITE_QUALITY = 1,
JPEG_READ_DEPTH = 2,
} JPEGPARAMETERTYPE;
#ifdef __cplusplus
typedef class CImageObject
{
/*
* methods
*/
public:
virtual void WINAPI CompressJPEG (void *pAddr, DWORD dwWidth, DWORD dwHeight, char * filename);
virtual void WINAPI GetJPEGInfo (char * filename, DWORD *pWidth, DWORD *pHeight, DWORD *pBPP);
virtual DWORD WINAPI SetJPEGParameters (JPEGPARAMETERTYPE type, DWORD value);
virtual void WINAPI DecompressJPEG (char * filename, SCANLINEPROCESS ScanlineProcess);
virtual void WINAPI DecompressJPEG (char * filename);
virtual void WINAPI GetImageParameters (char *&Start, char *&Current, DWORD &Width, DWORD &Height, DWORD &BPP);
virtual DWORD WINAPI DestroyImageObject(void);
CImageObject();
~CImageObject();
protected:
void write_JPEG_file (char * filename, int quality);
int get_JPEG_file_info (char * filename, struct jpeg_decompress_struct *pCinfo);
int read_JPEG_file (char * filename, SCANLINEPROCESS ScanlineProcess);
void __stdcall InternalScanlineProcess(LPVOID pBuf, int stride);
protected:
int out_quality; /* Specify quality of the subsequent compression 0-100, 100 being highest. */
JSAMPLE * out_image_buffer; /* Points to large array of R,G,B-order data */
int out_image_height; /* Number of rows in image */
int out_image_width; /* Number of columns in image */
char *image_buffer;
char *image_ptr;
DWORD image_width;
DWORD image_height;
DWORD image_depth;
} CIMAGEOBJECT, *LPCIMAGEOBJECT;
typedef DWORD (WINAPI *CREATEIMAGEOBJECT)(LPCIMAGEOBJECT &pImageOpject);
extern DWORD WINAPI CreateImageObject(LPCIMAGEOBJECT &pImageOpject);
#else //__cplusplus==0
typedef struct CImageObject
{
struct CImageObjectVtbl FAR *lpVtbl;
} CIMAGEOBJECT, *LPCIMAGEOBJECT;
struct CImageObjectVtbl {
void (WINAPI *CompressJPEG)(LPCIMAGEOBJECT, void *pAddr, DWORD dwWidth, DWORD dwHeight, char * filename);
void (WINAPI *GetJPEGInfo)(LPCIMAGEOBJECT, char * filename, DWORD *pWidth, DWORD *pHeight, DWORD *pBPP);
DWORD (WINAPI *SetJPEGParameters)(LPCIMAGEOBJECT, JPEGPARAMETERTYPE type, DWORD value);
void (WINAPI *DecompressJPEGCustom)(LPCIMAGEOBJECT, char * filename, SCANLINEPROCESS ScanlineProcess);
void (WINAPI *DecompressJPEG)(LPCIMAGEOBJECT, char * filename);
void (WINAPI *GetImageParameters)(LPCIMAGEOBJECT, char **Start, char **Current, DWORD *Width, DWORD *Height, DWORD *BPP);
DWORD (WINAPI *DestroyImageObject)(LPCIMAGEOBJECT);
};
typedef DWORD (WINAPI *CREATEIMAGEOBJECT)(LPCIMAGEOBJECT *pImageOpject);
extern DWORD WINAPI CreateImageObject(LPCIMAGEOBJECT *pImageOpject);
#endif //__cplusplus==0
#endif _NVIMAGE_H_