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...