2010-06-28 41 views
1

如何使用MFC在C++中旋转位图图像?我不想使用GDI。是否有可能通过只更改此代码中的x和y值?如何使用MFC在C++中旋转位图图像?

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

下一次添加作业标签如果它是一个家庭作业问题。 – 2010-06-28 04:41:24

+0

鉴于此开始代码,以及问题:是否有可能。为什么不先尝试一下,看看如果你在不同的地方交换x和y会发生什么。你可能会学到些东西。 – Toad 2010-06-28 04:50:37

+0

是的,我已经尝试了很多,并在图像中获得了许多变化,但不是旋转的图像。我想可能是我的逻辑不正确,所以我在这里问过。 – 2010-06-28 05:00:15

回答

1

询问使用MFC进行绘图但不使用GDI有点像询问如何不去弄湿游泳。就绘图而言,MFC是一个围绕GDI的简单包装,所以你用MFC做的任何事情都可以直接转换成GDI,只需添加一些语法糖(在这一领域,语法糖的数量基于糖尿病的饮食)。

这就是说,是的,在交换的循环xy可以做到大致正确的事(这取决于你想要的旋转方向,一件事) - 但在所有诚实,你应该好好的想清楚该报废代码完全。在任何情况下,您都使用SetPixel(即GDI)进行绘图;有很多比这更好的方式做到这一点(从外观看,你可以从CreateDIBSection巨大的好处)。

+0

你绝对是杰瑞。实际上我的时间到了。我想我在剩下的时间里无法学习GDI。这就是为什么要这样做旋转。一旦我在C上工作,只是出现了一个错误>我得到了旋转图像,但是现在我试图运行一个运气并且不知道它 – 2010-06-28 06:55:10

+1

旋转图像的最简单方法可能是正常绘制它,但是调用'SetWorldTransform'设置旋转。 – 2010-06-28 15:20:24