2013-09-26 62 views
0

我有一個SDI mfc應用程序,其中加載了一個位圖圖像,我想旋轉該位圖90Deg,180Deg & 270Deg。 能夠旋轉180度。但我堅持在90度和270度。 這是代碼。在MFC中旋轉位圖90deg,270deg

void CBmpView::OnRotate180() 
{ 
BYTE ptempBit ; 
CBmpViewerDoc* pDoc = GetDocument(); 
ASSERT_VALID(pDoc); 

int nLenght = (pDoc->dwBitsSize); 
if(pBitsView != NULL){ 
    DeleteObject(pBitsView);  
} 
if(pDoc->m_bRotationFlag == FALSE){ 
pDoc->m_bmpHandle = CreateDIBSection(NULL, pDoc->m_bitmapinfo,DIB_RGB_COLORS, 
    (void **)&pBitsView, NULL, 0); 
CopyMemory(pBitsView,pDoc->m_pBits,pDoc->dwBitsSize); 

for(int i=0; i < ((nLenght-1)) ; i++){ 
    ptempBit = pBitsView[i]; 
    pBitsView[i] = pBitsView[nLenght - 1]; 
    pBitsView[nLenght - 1] = ptempBit; 
    nLenght --; 
} 
pDoc->m_bRotationFlag = TRUE; 
Invalidate(); 
}else if(pDoc->m_bRotationFlag == TRUE){ 
    pDoc->m_bmpHandle = CreateDIBSection(NULL, pDoc->m_bitmapinfo,DIB_RGB_COLORS, 
     (void **)&pBitsView, NULL, 0); 
    CopyMemory(pBitsView,pDoc->m_pBits,pDoc->dwBitsSize); 
    pDoc->m_bRotationFlag = FALSE; 
    Invalidate(); 
} 
} 

請告訴我,如果可以使用任何其他方法。 在此先感謝

回答

0

只是一些僞代碼。 讓我們假設一個帶有行和列的iMaxRows和iMaxCols的網格。 應該是:

// Sourcegrid is always 
Pixels oldGrid[iMaxRows][iMaxCols] 

+

// 90° 
Pixels newGrid[iMaxCols][iMaxRows]; 
for (int iRow=0; iRow<iMaxRows; ++iRow) 
{ 
    for (int iCol=0; iCol<iMaxCols; ++iCol) 
    newGrid[iCol][iMaxRow-iRow-1] = oldGrid[iRow][iCol]; 
} 

+

// 180° 
Pixels newGrid[iMaxRows][iMaxCols]; 
for (int iRow=0; iRow<iMaxRows; ++iRow) 
{ 
    for (int iCol=0; iCol<iMaxCols; ++iCol) 
    newGrid[iMaxRow-iRow-1][iMaxCols-iCol-1] = oldGrid[iRow][iCol]; 
} 

+

// 270° 
Pixels newGrid[iMaxCols][iMaxRows]; 
for (int iRow=0; iRow<iMaxRows; ++iRow) 
{ 
    for (int iCol=0; iCol<iMaxCols; ++iCol) 
    newGrid[iMaxCols-iCol-1][iRow] = oldGrid[iRow][iCol]; 
} 
+0

正如你可以在像素數據是1個維陣列代碼中看到。所以我不能實現你提出的代碼。你能否建議其他解決方案? – xMayank

+0

問題在哪裏? grif [iRow] [iCol]轉換爲gridOnArray [iRow * iMaxCols + Icol]!這是簡單的數學。 – xMRi

+0

感謝xMRi但是,對於grif [iRow] [iCol]轉換爲gridOnArray [iRow * iMaxCols + icol],但是'newGrid [iCol] [iMaxRow-iRow-1]'或'newGrid [iMaxRow-iRow-1 ] [iMaxCols-iCol-1]''newGrid [iMaxCols-iCol-1] [iRow]'它會轉化爲什麼? – xMayank