VC++里如何自定义bmp的原点

VC++里怎么自定义bmp的原点
void CCh1_1View::OnDraw(CDC* pDC)
{

// 显示等待光标
BeginWaitCursor();

// 获取文档
CCh1_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

// 获取DIB
HDIB hDIB = pDoc->GetHDIB();

// 判断DIB是否为空
if (hDIB != NULL)
{
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);

// 获取DIB宽度
int cxDIB = (int) ::DIBWidth(lpDIB);

// 获取DIB高度
int cyDIB = (int) ::DIBHeight(lpDIB);

::GlobalUnlock((HGLOBAL) hDIB);

CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;

CRect rcDest;

// 判断是否是打印
if (pDC->IsPrinting())
{
// 是打印,计算输出图像的位置和大小,以便符合页面

// 获取打印页面的水平宽度(象素)
int cxPage = pDC->GetDeviceCaps(HORZRES);

// 获取打印页面的垂直高度(象素)
int cyPage = pDC->GetDeviceCaps(VERTRES);

// 获取打印机每英寸象素数
int cxInch = pDC->GetDeviceCaps(LOGPIXELSX);
int cyInch = pDC->GetDeviceCaps(LOGPIXELSY);

// 计算打印图像大小(缩放,根据页面宽度调整图像大小)
rcDest.top = rcDest.left = 0;
rcDest.bottom = (int)(((double)cyDIB * cxPage * cyInch)
/ ((double)cxDIB * cxInch));
rcDest.right = cxPage;

// 计算打印图像位置(垂直居中)
int temp = cyPage - (rcDest.bottom - rcDest.top);
rcDest.bottom += temp/2;
rcDest.top += temp/2;

}
else  
// 非打印
{
// 不必缩放图像
rcDest = rcDIB;
}

// 输出DIB
::PaintDIB(pDC->m_hDC, &rcDest, pDoc->GetHDIB(),
&rcDIB, pDoc->GetDocPalette());
}


// 恢复正常光标
EndWaitCursor();

}

CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;

这段代码里是不是定义了bmp图像的坐标原点定在左上角?

------解决方案--------------------
默认左上角是原点 和映射模式有关系
------解决方案--------------------
lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (i-1) + (j-1);


MFC里默认左上角为图像的原点,往右为X的正向,往下为y的正向,如果一张图片大小宽X高为W*H,那个像素循环时就是 0~W-1 0~H-1,所以图像的第i行第j列的像素,在坐标上应该为i-1,j-1


探讨
那访问图像的第i行第j列的像素的时候 是这么写:lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (i) + j;
还是lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lwidth-i-) + j;

谢谢啦