获取图片的像素值

来源:互联网 发布:浩兴软件 编辑:程序博客网 时间:2024/05/01 01:31

获取图片的像素值


 

/****************************************************************************
获取图片的像素值
****************************************************************************/
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);
}

 

 

 


 

 

 

推荐:

狮姐的博客(狮子窝,学佛与灵魂之探究)
大方广(学习传统文化)
慈善点击(轻松一点,行善积德,何乐不为)
电影《地球公民》(揭示不为人知的一面)  
心向光明 远离邪淫(现世警钟,不可不看)
戒淫(上篇)(正淫节欲,戒除邪淫) 
戒淫(中篇)(纵欲之乐,忧患随之)
公民教育——命由我造