2010-06-28 85 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