画对称图形,有点小点题`大家讨论一下`
mfc没有提供画对称图形的函数,有人想到了用下面的方法,想想蛮有道理的`,不过试了一下如果不采用数据(width=240,height=200),而用其他的数据的话,就会有规则的出现白线(少复制?),按理论分析应该不会出现问题的~~
void CSymmetryView::OnDraw(CDC* pDC)
{
CSymmetryDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//for(){}完成画对称图形
int x,y,width,height;
x=350;
y=30;
width=300;
height=300;
//使用下面的数据就可以不会出现白线
/*width=240;
height=200;*/
BITMAP m_bm;
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
Dc.SelectObject(bitmap);
GetObject(bitmap, sizeof(BITMAP), (LPSTR)&m_bm);
POINT ptSize;
ptSize.x = m_bm.bmWidth;
ptSize.y = m_bm.bmHeight;
pDC->StretchBlt(30,y,width,height,&Dc,0,0,ptSize.x,ptSize.y,SRCCOPY);
for(int i=0;i<ptSize.x;i++)
{
pDC->StretchBlt(x+(i*width/ptSize.x),y,width/ptSize.x,height,&Dc
,ptSize.x-i,0,1,ptSize.y,SRCCOPY);
}
}
[解决办法]
最好把BMP中的点读出来,然后对称之后再写进去
[解决办法]
是挺有意思的.....
看了下没有,问题会不会出在你:i*width/ptSize.x
pDC- >StretchBlt(x+(i*width/ptSize.x),y,width/ptSize.x,height,&Dc
_____________________________
你用"/"得到结果取整会不会露点