19,469
社区成员
发帖
与我相关
我的任务
分享
/****************************************************************************
获取图片的像素值
****************************************************************************/
class CGetPixel
{
private:
int m_bitmap_cx;
int m_bitmap_cy;
public:
HBITMAP m_bitmap;
CGetPixel() {}
CGetPixel(HBITMAP bitmap) {m_bitmap=bitmap;}
CGetPixel(TCHAR * PicturePath) { LoadPicture(PicturePath); }
CGetPixel(WORD ResourceID) { LoadResource(ResourceID); }
~CGetPixel() { ::DeleteObject(m_bitmap);}
bool LoadPicture(TCHAR * PicturePath)
{
m_bitmap=(HBITMAP)LoadImage(NULL, //应用程序实例
PicturePath, //路径
IMAGE_BITMAP,
0, //如果不置0,则此参数指定m_bitmap的宽(位图被拉伸)
0, //如果不置0,则此参数指定m_bitmap的高(位图被拉伸)
LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE);
if (!m_bitmap)
return false;
BITMAP bmp;
GetObject(m_bitmap,sizeof(BITMAP),(LPSTR)&bmp);
m_bitmap_cx=bmp.bmWidth;
m_bitmap_cy=bmp.bmHeight;
return true;
}
bool LoadResource(WORD ResourceID)
{
m_bitmap=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE (ResourceID) );
if (!m_bitmap)
return false;
BITMAP bmp;
GetObject(m_bitmap,sizeof(BITMAP),(LPSTR)&bmp);
m_bitmap_cx=bmp.bmWidth;
m_bitmap_cy=bmp.bmHeight;
return true;
}
COLORREF Get(int x=0,int y=0)
{
HDC hMemDC=CreateCompatibleDC(NULL); //创建内存DC
::SelectObject(hMemDC,m_bitmap); //把位图选进内存DC
COLORREF rgb=::GetPixel(hMemDC,x,y);
::DeleteDC(hMemDC) ; //删除内存DC
return rgb;
}
};
void CDemoDlg::OnButton1()
{
CGetPixel g_bmp1("D:\\My Documents\\My Pictures\\风景图片\\4244123431.bmp");
COLORREF rgb=g_bmp1.Get(39,10);
BYTE r=GetRValue(rgb);
BYTE g=GetGValue(rgb);
BYTE b=GetBValue(rgb);
// trace3((int)r,(int)g,(int)b);
}