Halcon 與 C 的型別轉換

2021-07-02 16:30:35 字數 3902 閱讀 6760

1.   從halcon到vc++

read_image(&image,"檔名");//讀入的為灰度影象

//獲取影象指標,注意輸出變數的型別

charlpcstype[max_string];

hlong pointer,width, height;

get_image_pointer1(image, &pointer,lpcstype, &width, &height);

//halcon與vc++中的影象之間,存在著上下翻轉

byte * lpbyte;

byte * imageg;

int bytewidth;

bytewidth = ((long) width * 3 + 3 ) / 4 * 4 ;

imageg = null ;

imageg = new byte[ bytewidth * (long) height ];

lpbyte = (byte *) pointer;       //注意結合影象畫素儲存的型別進行定義

int i,j;

for( j = (long)height-1; j>=0; j--)

{            //(注意tuple中影象資料的存放和vc中的差別)

for( i = 0; i < (long)widthgray; i++)

* (imageg + j * bytewidth + i * 3 + 0 ) = * lpbyte ;

* (imageg + j * bytewidth + i * 3 + 1 ) = * lpbyte ;

* (imageg + j * bytewidth + i * 3 + 2 ) = * lpbyte ;

lpbyte++;

bitmapinfo * rotatebmpinfo;

byte * bitbuffer;

bitbuffer = null;

bitbuffer = new byte[sizeof(bitmapinfo)];

rotatebmpinfo = (bitmapinfo *)bitbuffer;

rotatebmpinfo->bmiheader.bisize = sizeof(bitmapinfoheader);

rotatebmpinfo->bmiheader.biheight      = height;

rotatebmpinfo->bmiheader.biwidth      = width;

rotatebmpinfo->bmiheader.biplanes      = 1;

rotatebmpinfo->bmiheader.bibitcount = 24;

rotatebmpinfo->bmiheader.bicompression   = bi_rgb;

rotatebmpinfo->bmiheader.bisizeimage       = height * bytewidth;

rotatebmpinfo->bmiheader.bixpelspermeter= 0;

rotatebmpinfo->bmiheader.biypelspermeter= 0;

rotatebmpinfo->bmiheader.biclrused          = 0;

rotatebmpinfo->bmiheader.biclrimportant   = 0;

cwnd * m_pwnd ;

cdc *pdc = m_pwnd->getdc();

::stretchdibits(

pdc->getsafehdc(),

width + 10,

height + 10,

width,                        //顯示視窗寬度

height,                        //顯示視窗高度

0,0,

width,                        //影象寬度

height,                        //影象高度

imageg,                

rotatebmpinfo,                 

dib_rgb_colors,

srccopy);

m_pwnd->releasedc(pdc);

delete imageg ;

delete bitbuffer ;

2.   從vc++到halcon

unsigned char *pointer;

int width, height;

pointer = new unsigned char[width * height];

int i, j;

for (i=0; i注:

a)   gen_image1_extern函式中的變數width,height必須為htuple型別,pointer指標為unsigned char型別,輸入時轉換為long型。

b)   width, height必須與pointer指向的影象資料的長寬一致。

c)   pointer指標在gen_image1_extern函式呼叫之前分配了記憶體,之後不要馬上釋放,否則會出錯。應該在確保不再使用image變數之後再釋放。halcon內部會自動釋放image,感覺沒有釋放pointer(還需要進一步驗證)。

d)   顯示影象時,可能存在著影象的上下翻轉,可以按照1中的方法,將影象資料翻轉後再呼叫gen_image1_extern,或者使用halcon中的函式mirror_image()進行翻轉。

3.   在vc介面中建立影象視窗

hlong lwwindowid;

htuple windowhandle;

lwwindowid = (hlong)m_hwnd; //要顯示的控制項的控制代碼

set_window_attr("border_width",0); //設定視窗屬性

set_window_attr("background_color","light gray"); //設定視窗背景顏色

set_check("~father");

open_window(0,0,m_width,m_height,lwwindowid,"visible","",&windowhandle); //建立視窗

set_check("father");

set_part(windowhandle,0,0,m_width-1,m_height-1); //對視窗上顯示影象和區域的一些設定

set_draw(windowhandle,"margin");

set_colored(windowhandle,12);

disp_obj(image,windowhandle); //顯示影象image(hobject型別)

4.   從htuple型別讀取資料

//htuple有乙個元素

htuple aa = 120;

double dd = aa[0].d(); // dd=120.000

int ii = aa[0].i(); //ii=120

long ll = aa[0].l(); //ll=120

hlong hh = aa[0].l();//hh=120

long num = aa.num(); //num =1;

aa = "120"; //htuple為字串時,如果賦值不是字串,不能呼叫s()函式

const char *cc;

cc = aa[0].s(); //cc[0]='1',cc[1]='2',cc[2]='0'

//當aa為多元素的陣列時

aa[1] = 230;

num = aa.num(); //num =2;

ii = aa[1].i(); //ii=230   //其他獲取資料的方法與上面類似

閱讀(731)|

C 強制型別轉換與字元型別之間的轉換

1 強制型別轉換 在實際工程中幾乎是不可避免的,為此c 將強制型別轉換分為4種不同的型別,以提供更加安全可靠的轉換。強制型別轉換 說 明static cast 用於基本型別之間 有繼承關係的類物件之間 類指標之間的轉換 不能用於基本型別指標之間的轉換 const cast 用於去除變數的唯讀屬性 強...

C 自動型別轉換與強制型別轉換的講解

自動型別轉換 隱式型別轉換 這些轉換是 c 預設的以安全方式進行的轉換,不會導致資料丟失。例如,從小的整數型別轉換為大的整數型別,從派生類轉換為基類。轉換規則 從儲存範圍小的型別到儲存範圍大的型別。整數具體規則為 byte short char int long float double 也就是說b...

mysql型別轉換c 型別轉換 C 型別轉換

一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...