Files
Work/mdiwin/MESHWRP.HPP
2024-08-07 09:16:27 -04:00

55 lines
1.8 KiB
C++

#ifndef _MESHWARP_HPP_
#define _MESHWARP_HPP_
#include <mdiwin/types.hpp>
#include <mdiwin/point.hpp>
#include <mdiwin/string.hpp>
#include <mdiwin/vector.hpp>
#include <mdiwin/catmull.hpp>
class MeshWarp
{
public:
MeshWarp(void);
MeshWarp(HPALETTE hPalette,UHUGE *hpImage,WORD width,WORD height);
~MeshWarp();
HGLOBAL performWarp(Vector<Point> &sourceMesh,Vector<Point> &destMesh,int meshColRows,int &newWidth,int &newHeight);
HGLOBAL performWarp(Vector<FloatPairs> &sourceMesh,Vector<FloatPairs> &destMesh,int meshColRows,int &newWidth,int &newHeight);
static void dumpMesh(Vector<FloatPairs> &sourceMesh,Vector<FloatPairs> &destMesh,String &fileName);
private:
typedef Vector<FloatPairs> 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<FloatPairs> &mappingPoints,UHUGE *lpSrcScanline,UHUGE *lpDstScanline,int outLen);
void initializeSplineColumns(Vector<VectoredPairs> &splineData,int columnData);
Vector<FloatPairs> mSrcPairs;
Vector<FloatPairs> mDstPairs;
Vector<VectoredPairs> mVerticalSplineSrcData;
Vector<VectoredPairs> mVerticalSplineDstData;
Vector<VectoredPairs> mHorizontalSplineSrcData;
Vector<VectoredPairs> 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