#ifndef _MESHWARP_HPP_ #define _MESHWARP_HPP_ #include #include #include #include #include class MeshWarp { public: MeshWarp(void); MeshWarp(HPALETTE hPalette,UHUGE *hpImage,WORD width,WORD height); ~MeshWarp(); HGLOBAL performWarp(Vector &sourceMesh,Vector &destMesh,int meshColRows,int &newWidth,int &newHeight); HGLOBAL performWarp(Vector &sourceMesh,Vector &destMesh,int meshColRows,int &newWidth,int &newHeight); static void dumpMesh(Vector &sourceMesh,Vector &destMesh,String &fileName); private: typedef Vector VectoredPairs; enum {MaxColors=256,MaxLineWidth=2048}; void loadPaletteEntries(void); HGLOBAL performWarp(int &newWidth,int &newHeight,int meshColRows); void firstPassPhaseOne(int columnData); void firstPassPhaseTwo(void); void secondPassPhaseOne(int columnData); void secondPassPhaseTwo(void); void resampleGenerate(Vector &mappingPoints,UHUGE *lpSrcScanline,UHUGE *lpDstScanline,int outLen); void initializeSplineColumns(Vector &splineData,int columnData); Vector mSrcPairs; Vector mDstPairs; Vector mVerticalSplineSrcData; Vector mVerticalSplineDstData; Vector mHorizontalSplineSrcData; Vector mHorizontalSplineDstData; HPALETTE mhPalette; PALETTEENTRY mPaletteData[MaxColors]; HGLOBAL mhGlobalImage; HGLOBAL mhGlobalSource; UHUGE *mhpGlobalImage; HGLOBAL mhGlobalIntermediate; UHUGE *mhpIntermediate; UHUGE *mhpImage; WORD mWidth; WORD mHeight; WORD mDstWidth; WORD mDstHeight; }; inline void MeshWarp::loadPaletteEntries(void) { ::GetPaletteEntries(mhPalette,0,MaxColors,(PALETTEENTRY FAR *)&mPaletteData); } #endif