windows-nt/Source/XPSP1/NT/shell/osshell/accesory/mspaint/interlac.h
2020-09-26 16:20:57 +08:00

70 lines
2.8 KiB
C

/*********************************************************************
Interlace.h
Header file for interlace module.
*********************************************************************/
#ifndef _INTERLACE_H
#define _INTERLACE_H
#include "Image.h"
#define NUM_PASSES 7
#pragma pack(2) /* Apparently, this is reasonably important */
/* The primary state data structure. */
typedef struct
{
IFLCLASS Class;
long iImageHeight;
long iImageWidth;
long cbPixelSize;
long cScanBlocks;
long cPassScanLines[NUM_PASSES];
long cTotalScanLines;
long iPass;
long iPassLine;
long iScanLine;
long iImageLine;
} ADAM7_STRUCT, *pADAM7_STRUCT;
//************************************************************************************
// Given an image described by the parameters of the ADAM7_STRUCT, calculate the
// number of scan lines in the image file which has been interlaced using the Adam7
// scheme.
//************************************************************************************
int iADAM7CalculateNumberOfScanLines(pADAM7_STRUCT ptAdam7);
//************************************************************************************
// Generate a deinterlaced DIB; i.e., each pixel is in BGR in the case
// of RGB/RGBA image classes, and raster line data is stored in a contiguous block.
//************************************************************************************
// The CALLING application is responsible for deallocating the structure created by
// this function.
LPBYTE *ppbADAM7InitDIBPointers(LPBYTE pbDIB, pADAM7_STRUCT ptAdam7, DWORD cbImageLine);
// The following returns TRUE if the scan line was an empty scan line.
BOOL ADAM7AddRowToDIB(LPBYTE *ppbDIBPtrs, LPBYTE pbScanLine, pADAM7_STRUCT ptAdam7);
//************************************************************************************
//************************************************************************************
// Generate a deinterlaced image; i.e., each pixel is in RGB in the case
// of RGB/RGBA image classes, and raster line data may not necessarily be stored
// in one contiguous block of memory.
//************************************************************************************
// The following returns TRUE if the scan line was an empty scan line.
BOOL ADAM7AddRowToImageBuffer(LPBYTE ppbInmageBuffer[], LPBYTE pbScanLine, pADAM7_STRUCT ptAdam7);
//************************************************************************************
//************************************************************************************
// Generate a deinterlaced alpha channel data block.
//************************************************************************************
BOOL ADAM7RMFDeinterlaceAlpha(LPWORD *ppwInterlaced, LPWORD *ppwDeinterlaced,
IFL_ALPHA_CHANNEL_INFO *ptIFLAlphaInfo);
#endif // _INTERLACE_H