高分求24位图截取,就是要在原始24位图上截取一个矩形位图并保存,请大家赐教啊 !不胜感激,高分相赠!!
解决方案 »
- 如何申请一个能做Socket服务器的IP地址
- IWebBrowser接口
- 劳驾谁帮我看看这段代码哪里泄漏了
- 截获skype会话中的中文,出了问题!
- 动态创建的CEdit怎么定义tab键的顺序?
- 关于listen的问题
- codewarrior进来
- 我的建议大家赞同吗?
- 谁告诉我CString、CHAR、CHAR、LPCSTR、LPSTR之间的区别与联系我在线等候
- 如何动态改变属性页的“next”和“finish”属性?
- VC6编辑器界面中文乱码
- 主程序中如果用AfxOleInit()初始化com就会出现DLL中调用AfxConnectionAdvise失败,而改用用CoInitialize()则会成功,这是为何
HDIB CropDib (HDIB hdib, LPRECT prc)
{
HDIB hDst,h;
BYTE *lpDst;
BYTE *lpSrc;
LPBITMAPINFOHEADER lpbiDst,lpbiSrc;
DWORD dx,dy,width,height;
DWORD dwSrcLineLen, dwDstLineLen;
DWORD dwLen,dwBytes;
register int y;
dx = (DWORD)prc->right - prc->left;
dy = (DWORD)prc->bottom - prc->top;
hDst = (HDIB)CopyHandle(hdib);
lpSrc = (BYTE *)GlobalLock(hdib);
lpbiSrc = (LPBITMAPINFOHEADER)lpSrc;
width = lpbiSrc->biWidth;
height = lpbiSrc->biHeight;
dwSrcLineLen = ALIGNULONG( (DWORD)width );
dwBytes = ALIGNULONG(dx) * dy;
dwLen = lpbiSrc->biSize + (DWORD)PaletteSize((LPSTR)lpbiSrc) + dwBytes;
h =(HDIB) GlobalReAlloc(hDst, dwLen, GHND);
if (!h){
GlobalUnlock(hdib);
return NULL;
}
else
hDst = h;
lpDst = (BYTE *)GlobalLock(hDst);
lpbiDst = (LPBITMAPINFOHEADER)lpDst;
lpbiDst->biWidth = dx;
lpbiDst->biHeight = dy;
lpbiDst->biSizeImage = dwBytes;
dwDstLineLen = ALIGNULONG( (DWORD)dx );
lpDst = lpDst + lpbiDst->biSize + PaletteSize((LPSTR)lpDst);
lpSrc = lpSrc + lpbiSrc->biSize + PaletteSize((LPSTR)lpSrc);
lpSrc = lpSrc + dwSrcLineLen * (height - (DWORD)prc->bottom) + (DWORD)prc->left;
for( y = 0; y < (int)dy; y ++ )
{
CopyMemory( lpDst,lpSrc, (size_t)dx );
lpSrc += dwSrcLineLen;
lpDst += dwDstLineLen;
}
GlobalUnlock( hDst );
GlobalUnlock( hdib );
return hDst;
}