StretchDIBits
我在用StretchDIBits函数将源位图拷贝到目标区时搞不懂了。不如:
1.
::StretchDIBits(pDC->GetSafeHdc(),
0,0,bitmapWidth,bitmapHeight,
0,0,bitmapWidth,bitmapHeight,
m_pImgData,pBitmapInfo,
DIB_RGB_COLORS,SRCCOPY);
实现了将源位图拷贝到目标区域。从代码看源位图和目标位图的坐标系都是一样的,都是以左上角作为坐标原点。
2.
for(int j=0;j<bitmapHeight;j++)//扫描特效显示的具体算法
{
::StretchDIBits(pDC->GetSafeHdc(),
0, j, bitmapWidth, 1,
0, bitmapHeight-j, bitmapWidth, 1,
m_pImgData, pBitmapInfo,
DIB_RGB_COLORS, SRCCOPY);
Sleep(3);//设置延时时间
}
实现了扫描显示图片的功能。从代码看源位图的坐标系应该是坐下角。
这两段代码都运行正确。StretchDIBits函数在将源位图中的矩形区域的数据拷贝后显示在目标设备环境中的矩形中时,显示器的目标区域的坐标原点在右上角,请问源位图的坐标原点在什么地方?是不是我理解有错误?
请问各位大侠这是怎么回事?万分感谢!!
[解决办法]
int StretchDIBits(
HDC hdc, // handle to DC
int XDest, // x-coord of destination upper-left corner
int YDest, // y-coord of destination upper-left corner
int nDestWidth, // width of destination rectangle
int nDestHeight, // height of destination rectangle
int XSrc, // x-coord of source upper-left corner
int YSrc, // y-coord of source upper-left corner
int nSrcWidth, // width of source rectangle
int nSrcHeight, // height of source rectangle
CONST VOID *lpBits, // bitmap bits
CONST BITMAPINFO *lpBitsInfo, // bitmap data
UINT iUsage, // usage options
DWORD dwRop // raster operation code
);
[解决办法]
要看源图是什么类型的,源图的原点既可以在左上,又可以在左下。