如何使用MFC在c ++中旋转位图图像?我不想使用GDI。只能在此代码中更改x和y值吗?
CBitmap img;
CDC dc;
BITMAP bmp;
img.LoadBitmapW(IDB_BITMAP1);
img.GetBitmap(&bmp);
CDC* pDC = this->GetDC();
dc.CreateCompatibleDC(pDC);
CBitmap* pOld = dc.SelectObject(&img);
for(int y = 0; y < bmp.bmHeight; y++)
{
for(int x = 0; x < bmp.bmWidth; x++)
{
COLORREF rgb = dc.GetPixel(x, y);
BYTE r = GetRValue(rgb);
BYTE g = GetGValue(rgb);
BYTE b = GetBValue(rgb);
dc.SetPixel(x, y, RGB(r,g,b));
}
}
pDC->BitBlt(200, 200, bmp.bmWidth, bmp.bmHeight, &dc, 0, 0, SRCCOPY);
dc.SelectObject(pOld);
请有人回复,因为这是项目工作的最后一天,明天是提交。
答案 0 :(得分:1)
询问使用MFC进行绘图但不使用GDI有点像询问如何在不弄湿的情况下游泳。就绘图而言,MFC是围绕GDI的 thin 包装器,所以你用MFC做的任何事情都会直接翻译成GDI,只需要添加一些语法糖(在这方面,语法糖基于糖尿病患者的饮食。)
那就是说,是的,在你的循环中交换x
和y
可以做大致正确的事情(取决于你想要的旋转方向,一方面) - 虽然说实话应该认真考虑完全废弃该代码。你在任何情况下都使用SetPixel(即GDI)来绘图;有很多更好的方法来做到这一点(从事物的外观来看,你可以从CreateDIBSection
中获益匪浅。)