写了一个图片任意拉伸的处理,但效率比较低,有没有谁能帮优化一下:
CDC *dc=GetDC();
CRect rc;
GetWindowRect(rc);
CDC BufferDC;
BufferDC.CreateCompatibleDC(dc);
CBitmap BufferBmp;
BufferBmp.CreateCompatibleBitmap(dc,rc.Width(),rc.Height());
BufferDC.SelectObject(&BufferBmp);
BufferDC.FillSolidRect(0,0,rc.Width(),rc.Height(),RGB(255,255,255)); CDC pdc;
pdc.CreateCompatibleDC(&BufferDC);
pdc.SelectObject(&bitmap);
BITMAP bp; 
bitmap.GetBitmap(&bp); //bitmap 是一个 CBitmap 对象 float w=bp.bmWidth;
float h=bp.bmHeight; for(UINT i=0;i<w-1;i++)
{ PointF p1,p2;
float cx=pt[1].X-pt[0].X;
float cy=pt[1].Y-pt[0].Y; float cw=cx/w; p1.X=cx*i/w+pt[0].X;p1.Y=cy*i/w+pt[0].Y; //相对 pt0
cx=pt[3].X-pt[2].X;
cy=pt[3].Y-pt[2].Y; if(cx/w>cw)cw=cx/w; p2.X=cx*i/w+pt[2].X;p2.Y=cy*i/w+pt[2].Y; //相对 pt2
for(UINT j=0;j<h-1;j++)
{
COLORREF c=pdc.GetPixel(i,j);
float x,y;
cx=p2.X-p1.X;
cy=p2.Y-p1.Y;
float ch=cy/h;
x=cx*j/h+p1.X;y=cy*j/h+p1.Y;
BufferDC.FillSolidRect(x,y,cw+1,ch+1,c);
}
}
dc->BitBlt(0,0,rc.Width(),rc.Height(),&BufferDC,0,0,SRCCOPY);
pdc.DeleteDC(); BufferDC.DeleteDC();
BufferBmp.DeleteObject(); dc->MoveTo(pt[0].X,pt[0].Y);
dc->LineTo(pt[1].X,pt[1].Y);
dc->LineTo(pt[3].X,pt[3].Y);
dc->LineTo(pt[2].X,pt[2].Y);
dc->LineTo(pt[0].X,pt[0].Y); dc->FillSolidRect(pt[0].X-2,pt[0].Y-2,5,5,RGB(0,0,0));
dc->FillSolidRect(pt[1].X-2,pt[1].Y-2,5,5,RGB(0,0,0));
dc->FillSolidRect(pt[2].X-2,pt[2].Y-2,5,5,RGB(0,0,0));
dc->FillSolidRect(pt[3].X-2,pt[3].Y-2,5,5,RGB(0,0,0));

ReleaseDC(dc);