#include"transform_affine5.h" #include"bmpio.h" static BmpIO g_bmpio; static int g_w=0,g_h=0,g_len=0; static HDC g_hdc=NULL; static BYTE *g_pixel=NULL; static BYTE *g_buf=NULL; // 原画像の保存バッファ #define POINTS 5 // 5 以外は無理 static Point g_ptIn[POINTS],g_ptOut[POINTS]; // 入力と出力の参照点 static int g_ci=0,g_co=0; // 設定した参照点の個数 static POINT g_lineIn[POINTS],g_lineOut[POINTS]; // ポリライン座標 // 5点アフィン変換 void Transform(void) { // 出力から入力を求める SetSrcPoint(g_ptOut[0],g_ptOut[1],g_ptOut[2],g_ptOut[3],g_ptOut[4]); // 出力を変形元に SetDstPoint(g_ptIn[0],g_ptIn[1],g_ptIn[2],g_ptIn[3],g_ptIn[4]); // 入力を変形先に BYTE *temp=(BYTE*)malloc(g_len*g_h); memset(temp,0,g_len*g_h); Point P; int ix,iy; BYTE b=(BYTE)g_bmpio.GetBitCount()/8; for(int y=0;y=g_w || iy>=g_h) continue; memcpy(&temp[x*b+y*g_len],&g_pixel[ix*b+iy*g_len],b); } } memcpy(g_pixel,temp,g_len*g_h); free(temp); } // 参照点を全てクリア void DeletePoint(void) { for(int i=0;i=POINTS) { MoveToEx(hdc,g_lineIn[3].x,g_lineIn[3].y,NULL); LineTo(hdc,g_lineIn[0].x,g_lineIn[0].y); for(int i=0;i=POINTS) { MoveToEx(hdc,g_lineOut[3].x,g_lineOut[3].y,NULL); LineTo(hdc,g_lineOut[0].x,g_lineOut[0].y); for(int i=0;i