摘自网上
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;
}