我有一个SDI mfc应用程序,其中加载了位图图像,我想旋转该位图90Deg,180Deg& 270Deg。 能够旋转180度。但我被困在90和270度。 这是代码。
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 :(得分: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];
}