214 lines
5.5 KiB
C
214 lines
5.5 KiB
C
|
/**************************************************************************
|
||
|
|
||
|
DRAWDIB.H - routines for drawing DIBs to the screen.
|
||
|
|
||
|
Copyright (c) 1990-1994, Microsoft Corp. All rights reserved.
|
||
|
|
||
|
this code handles stretching and dithering with custom code.
|
||
|
|
||
|
the following DIB formats are supported:
|
||
|
|
||
|
8bpp
|
||
|
16bpp
|
||
|
24bpp
|
||
|
|
||
|
drawing to:
|
||
|
|
||
|
16 color DC (will dither 8bpp down)
|
||
|
256 (palletized) DC (will dither 16 and 24bpp down)
|
||
|
Full-color DC (will just draw it!)
|
||
|
|
||
|
**************************************************************************/
|
||
|
|
||
|
#ifndef _INC_DRAWDIB
|
||
|
#define _INC_DRAWDIB
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#ifndef RC_INVOKED
|
||
|
#ifndef VFWAPI
|
||
|
#define VFWAPI WINAPI
|
||
|
#ifdef WINAPIV
|
||
|
#define VFWAPIV WINAPIV
|
||
|
#else
|
||
|
#define VFWAPIV FAR CDECL
|
||
|
#endif
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
// begin_vfw32
|
||
|
|
||
|
typedef HANDLE HDRAWDIB; /* hdd */
|
||
|
|
||
|
/*********************************************************************
|
||
|
|
||
|
DrawDib Flags
|
||
|
|
||
|
**********************************************************************/
|
||
|
#define DDF_UPDATE 0x0002 /* re-draw the last DIB */
|
||
|
#define DDF_SAME_HDC 0x0004 /* HDC same as last call (all setup) */
|
||
|
#define DDF_SAME_DRAW 0x0008 /* draw params are the same */
|
||
|
#define DDF_DONTDRAW 0x0010 /* dont draw frame, just decompress */
|
||
|
#define DDF_ANIMATE 0x0020 /* allow palette animation */
|
||
|
#define DDF_BUFFER 0x0040 /* always buffer image */
|
||
|
#define DDF_JUSTDRAWIT 0x0080 /* just draw it with GDI */
|
||
|
#define DDF_FULLSCREEN 0x0100 /* use DisplayDib */
|
||
|
#define DDF_BACKGROUNDPAL 0x0200 /* Realize palette in background */
|
||
|
#define DDF_NOTKEYFRAME 0x0400 /* this is a partial frame update, hint */
|
||
|
#define DDF_HURRYUP 0x0800 /* hurry up please! */
|
||
|
#define DDF_HALFTONE 0x1000 /* always halftone */
|
||
|
|
||
|
#define DDF_PREROLL DDF_DONTDRAW /* Builing up a non-keyframe */
|
||
|
#define DDF_SAME_DIB DDF_SAME_DRAW
|
||
|
#define DDF_SAME_SIZE DDF_SAME_DRAW
|
||
|
|
||
|
/*********************************************************************
|
||
|
|
||
|
DrawDib functions
|
||
|
|
||
|
*********************************************************************/
|
||
|
/*
|
||
|
** DrawDibOpen()
|
||
|
**
|
||
|
*/
|
||
|
extern HDRAWDIB VFWAPI DrawDibOpen(void);
|
||
|
|
||
|
/*
|
||
|
** DrawDibClose()
|
||
|
**
|
||
|
*/
|
||
|
extern BOOL VFWAPI DrawDibClose(HDRAWDIB hdd);
|
||
|
|
||
|
/*
|
||
|
** DrawDibGetBuffer()
|
||
|
**
|
||
|
*/
|
||
|
extern LPVOID VFWAPI DrawDibGetBuffer(HDRAWDIB hdd, LPBITMAPINFOHEADER lpbi, DWORD dwSize, DWORD dwFlags);
|
||
|
|
||
|
/*
|
||
|
** DrawDibGetPalette()
|
||
|
**
|
||
|
** get the palette used for drawing DIBs
|
||
|
**
|
||
|
*/
|
||
|
extern HPALETTE VFWAPI DrawDibGetPalette(HDRAWDIB hdd);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** DrawDibSetPalette()
|
||
|
**
|
||
|
** get the palette used for drawing DIBs
|
||
|
**
|
||
|
*/
|
||
|
extern BOOL VFWAPI DrawDibSetPalette(HDRAWDIB hdd, HPALETTE hpal);
|
||
|
|
||
|
/*
|
||
|
** DrawDibChangePalette()
|
||
|
*/
|
||
|
extern BOOL VFWAPI DrawDibChangePalette(HDRAWDIB hdd, int iStart, int iLen, LPPALETTEENTRY lppe);
|
||
|
|
||
|
/*
|
||
|
** DrawDibRealize()
|
||
|
**
|
||
|
** realize the palette in a HDD
|
||
|
**
|
||
|
*/
|
||
|
extern UINT VFWAPI DrawDibRealize(HDRAWDIB hdd, HDC hdc, BOOL fBackground);
|
||
|
|
||
|
/*
|
||
|
** DrawDibStart()
|
||
|
**
|
||
|
** start of streaming playback
|
||
|
**
|
||
|
*/
|
||
|
extern BOOL VFWAPI DrawDibStart(HDRAWDIB hdd, DWORD rate);
|
||
|
|
||
|
/*
|
||
|
** DrawDibStop()
|
||
|
**
|
||
|
** start of streaming playback
|
||
|
**
|
||
|
*/
|
||
|
extern BOOL VFWAPI DrawDibStop(HDRAWDIB hdd);
|
||
|
|
||
|
/*
|
||
|
** DrawDibBegin()
|
||
|
**
|
||
|
** prepare to draw
|
||
|
**
|
||
|
*/
|
||
|
extern BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd,
|
||
|
HDC hdc,
|
||
|
int dxDst,
|
||
|
int dyDst,
|
||
|
LPBITMAPINFOHEADER lpbi,
|
||
|
int dxSrc,
|
||
|
int dySrc,
|
||
|
UINT wFlags);
|
||
|
/*
|
||
|
** DrawDibDraw()
|
||
|
**
|
||
|
** actualy draw a DIB to the screen.
|
||
|
**
|
||
|
*/
|
||
|
extern BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd,
|
||
|
HDC hdc,
|
||
|
int xDst,
|
||
|
int yDst,
|
||
|
int dxDst,
|
||
|
int dyDst,
|
||
|
LPBITMAPINFOHEADER lpbi,
|
||
|
LPVOID lpBits,
|
||
|
int xSrc,
|
||
|
int ySrc,
|
||
|
int dxSrc,
|
||
|
int dySrc,
|
||
|
UINT wFlags);
|
||
|
|
||
|
/*
|
||
|
** DrawDibUpdate()
|
||
|
**
|
||
|
** redraw the last image (may only be valid with DDF_BUFFER)
|
||
|
*/
|
||
|
#define DrawDibUpdate(hdd, hdc, x, y) \
|
||
|
DrawDibDraw(hdd, hdc, x, y, 0, 0, NULL, NULL, 0, 0, 0, 0, DDF_UPDATE)
|
||
|
|
||
|
/*
|
||
|
** DrawDibEnd()
|
||
|
*/
|
||
|
extern BOOL VFWAPI DrawDibEnd(HDRAWDIB hdd);
|
||
|
|
||
|
/*
|
||
|
** DrawDibTime() [for debugging purposes only]
|
||
|
*/
|
||
|
typedef struct {
|
||
|
LONG timeCount;
|
||
|
LONG timeDraw;
|
||
|
LONG timeDecompress;
|
||
|
LONG timeDither;
|
||
|
LONG timeStretch;
|
||
|
LONG timeBlt;
|
||
|
LONG timeSetDIBits;
|
||
|
} DRAWDIBTIME, FAR *LPDRAWDIBTIME;
|
||
|
|
||
|
BOOL VFWAPI DrawDibTime(HDRAWDIB hdd, LPDRAWDIBTIME lpddtime);
|
||
|
|
||
|
/* display profiling */
|
||
|
#define PD_CAN_DRAW_DIB 0x0001 /* if you can draw at all */
|
||
|
#define PD_CAN_STRETCHDIB 0x0002 /* basicly RC_STRETCHDIB */
|
||
|
#define PD_STRETCHDIB_1_1_OK 0x0004 /* is it fast? */
|
||
|
#define PD_STRETCHDIB_1_2_OK 0x0008 /* ... */
|
||
|
#define PD_STRETCHDIB_1_N_OK 0x0010 /* ... */
|
||
|
|
||
|
DWORD VFWAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER lpbi);
|
||
|
|
||
|
// end_vfw32
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif // _INC_DRAWDIB
|