获取图片的像素值
/****************************************************************************
获取图片的像素值
****************************************************************************/
class CGetPixel
{
private:
int m_bitmap_cx;
int m_bitmap_cy;
public:
HBITMAP m_bitmap;
CGetPixel() {}
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 GetPixel(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::OnButton2()
{
CGetPixel bmp1("D://My Documents//My Pictures//风景图片//4244123431.bmp");
COLORREF rgb=bmp1.GetPixel(39,10);
BYTE r=GetRValue(rgb);
BYTE g=GetGValue(rgb);
BYTE b=GetBValue(rgb);
trace3((int)r,(int)g,(int)b);
CGetPixel bmp2(IDB_BITMAP1);
COLORREF rgb2=bmp2.GetPixel(39,10);
}