halcon学习基础-图像基本操作

来源:互联网 发布:手机淘宝账户管理在哪 编辑:程序博客网 时间:2024/06/10 11:13

摘自网上

Hobject  mImg;

Hlong mW=0,mH=0,mDataPtr;

read_image(&mImg, "C:/Documents and Settings/Administrator/桌面/kk2.BMP");//1、加载图片到mImg对像中

get_image_size(mImg,&mW,&mH);//2、获取图片的宽度、高度

gen_image_const(&mImg,"byte", mW, mH);//2.1设置图像的宽度、高度

 

 get_image_pointer1(mImg,&mDataPtr,mType,&mW,&mH);//3、将图像数据指针指向ptr 、宽度、高度

 //--------4.-Vc++-->Halcon-----------------------------------------------
 unsigned char *Pointer;           
 Pointer = new unsigned char[mH * mW];        
 for (i=0; i<mH; i++)        
 {          
  for (j=0; j<mW; j++)         
  {           
   Pointer[i*mW+j] = j % 255;        
  }       
 }      
 gen_image1_extern(&mImg, "byte", (HTuple)mW, (HTuple)mH, (long)Pointer, NULL);//设置图片对象mImg的数据内容、宽度、高度

//-----5. Halcon-->VC++---------------------------------------------------
 BYTE * lpByte;
 BYTE * ImageG=NULL;
 int bytewidth;

 bytewidth = ((long) mW * 3 + 3 ) / 4 * 4 ;
 ImageG = new BYTE[ bytewidth * (long) mH ];
 lpByte = (BYTE *) mDataPtr;       //注意结合图像像素存储的类型进行定义
 for( j = (long)mH-1; j>=0; j--)
 {    
  //(注意tuple中图像数据的存放和VC中的差别)
  for( i = 0; i < (long)mW; i++)
  {
   * (ImageG + j * bytewidth + i * 3 + 0 ) = * lpByte ;
   * (ImageG + j * bytewidth + i * 3 + 1 ) = * lpByte ;
   * (ImageG + j * bytewidth + i * 3 + 2 ) = * lpByte ;
   lpByte++;
  }
 }
//------------6-GDI 显示图片数据-------------------------------------

BITMAPINFO * RotateBmpInfo;
 BYTE * bitBuffer;
 bitBuffer = NULL;
 bitBuffer = new BYTE[sizeof(BITMAPINFO)];
 RotateBmpInfo = (BITMAPINFO *)bitBuffer;
 RotateBmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
 RotateBmpInfo->bmiHeader.biHeight      = mH;
 RotateBmpInfo->bmiHeader.biWidth      = mW;
 RotateBmpInfo->bmiHeader.biPlanes      = 1;
 RotateBmpInfo->bmiHeader.biBitCount = 24;
 RotateBmpInfo->bmiHeader.biCompression   = BI_RGB;
 RotateBmpInfo->bmiHeader.biSizeImage       = mH * bytewidth;
 RotateBmpInfo->bmiHeader.biXPelsPerMeter= 0;
 RotateBmpInfo->bmiHeader.biYPelsPerMeter= 0;
 RotateBmpInfo->bmiHeader.biClrUsed          = 0;
 RotateBmpInfo->bmiHeader.biClrImportant   = 0;

 CWnd * m_pWnd ;
 m_pWnd = AfxGetApp()->GetMainWnd();

 CDC *pDC = m_pWnd->GetDC();
 ::StretchDIBits(

  pDC->GetSafeHdc(),

   10,

  10,

  mW,                        //显示窗口宽度

  mH,                        //显示窗口高度

  0,

  0,

  mW,                        //图像宽度

  mH,                        //图像高度

  ImageG,              

  RotateBmpInfo,               

  DIB_RGB_COLORS,

  SRCCOPY);

 m_pWnd->ReleaseDC(pDC);
 delete [] ImageG ;
 delete [] bitBuffer ;

 //set_window_attr("border_width",0);

//Hlong     lWWindowID,WindowHandle;

//lWWindowID = (Hlong)this->m_hWnd;

//set_check("~father");
 //open_window(0,0,mW,mH,lWWindowID,"visible","",&WindowHandle);//close_window(WindowHandle);
 //set_check("father");
 //disp_obj(mImg,WindowHandle);//disp_image(mImg,WindowHandle);

 

//----------------7--图像点击事件-------------------------------------------

 Hlong     Row,Column,Button;

 get_mbutton(WindowHandle,&Row,&Column,&Button);
 switch(Button)
 {
 case 1: 
  ::MessageBox(NULL,"Left button !","提示",0);
  break;
 case 2: 
  ::MessageBox(NULL,"Left button !","提示",0);
  break;
 case 4: 
  ::MessageBox(NULL,"Left button !","提示",0);
  break;
 }

原创粉丝点击