如何使用MFC在c ++中旋转位图图像?

时间:2010-06-28 04:23:23

标签: c++ mfc

如何使用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);

请有人回复,因为这是项目工作的最后一天,明天是提交。

1 个答案:

答案 0 :(得分:1)

询问使用MFC进行绘图但不使用GDI有点像询问如何在不弄湿的情况下游泳。就绘图而言,MFC是围绕GDI的 thin 包装器,所以你用MFC做的任何事情都会直接翻译成GDI,只需要添加一些语法糖(在这方面,语法糖基于糖尿病患者的饮食。)

那就是说,是的,在你的循环中交换xy可以做大致正确的事情(取决于你想要的旋转方向,一方面) - 虽然说实话应该认真考虑完全废弃该代码。你在任何情况下都使用SetPixel(即GDI)来绘图;有很多更好的方法来做到这一点(从事物的外观来看,你可以从CreateDIBSection中获益匪浅。)