您的位置:首页 > 其它

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

2012-12-16 17:19 357 查看
摘自网上

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: