一张bmp的图片,鼠标选取部分保留,其余部分全部变成白色,不知道应该怎么做,请各位指点指点。
我现在已经实现了选取,而且可以把选取部分保存为bmp的图片,但是却不知如何实现上述功能。
研究了一下bmp文件格式,觉得可以直接改变.bmp文件,可是不知道选取坐标和图片数据矩阵的对应关系是怎样的!
我现在已经实现了选取,而且可以把选取部分保存为bmp的图片,但是却不知如何实现上述功能。
研究了一下bmp文件格式,觉得可以直接改变.bmp文件,可是不知道选取坐标和图片数据矩阵的对应关系是怎样的!
去掉文件头和调色板部分,数据是根据图片像素的左下角到右上角的顺序组织的
每个像素占用字节和位图格式有关
把这个研究一下,找到矩形所对应像素改成白色就不难了
代码如下: CDC *pBkDC=GetDC();
hMemDC = CreateCompatibleDC(pBkDC->m_hDC); GetObject(hbitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
hBkBitmap = CreateCompatibleBitmap(hMemDC,Bitmap.bmWidth,Bitmap.bmHeight);
HBITMAP hOldBkBitmap = (HBITMAP)::SelectObject(hMemDC, hBkBitmap);
//背景填充为白色
::SetBkMode(hMemDC,OPAQUE);//背景模式为不透明
::SetBkColor(hMemDC,RGB(255,255,255));
RECT rt = {0,0,rect.bottom,rect.right};
HBRUSH hBrushBg = CreateSolidBrush(RGB(255,255,255));
FillRect(hMemDC,&rt,hBrushBg);
DeleteObject(hBrushBg);
//将截取图片粘贴到背景图片上
CDC *pDC=GetDC();
hSourceDC = CreateCompatibleDC(pDC->m_hDC);
HBITMAP hOldInterceptBmp= (HBITMAP)::SelectObject(hSourceDC, hInterceptBmp); ::SetBkMode(hSourceDC,TRANSPARENT);//背景模式为透明
::BitBlt(hMemDC,rect.left,rect.top,Bitmap.bmWidth,Bitmap.bmHeight,
hSourceDC,0,0,SRCCOPY);//PATCOPY hInterceptBmp = (HBITMAP)::SelectObject(hSourceDC, hOldInterceptBmp);
hBkBitmap = (HBITMAP)::SelectObject(hMemDC, hOldBkBitmap);
DeleteDC(hMemDC);
ReleaseDC(pBkDC);
ReleaseDC(pDC);