關於VC封裝DLL, 影象傳遞的方法
大家都會想要把HALCON使用VC編寫演算法封裝成DLL(別人VB, Delphi, C#呼叫), 所以總結Halcon和VC DLL影象資料怎麼傳遞的。注意各種開發語言處理過程,影象都應轉成BMP格式8或24點陣圖像,只有bitmap才可以把畫素分解成R, G, B,GRAY四中8點陣圖格式,相信這種處理方式才是標準的和可拓展,即可使用halcon處理,同時可以編寫自己的演算法。 //建議不要使用halcon自帶影象採集運算元, 採集影象(Hdevelop開發除外), 最好使用相機供應商提供SDK來開發, 這樣程式才可把控,靈活除錯。 //1. 標頭檔案定義 unsigned char * PHalconImage ; //全域性影象資料變數int Img_width ; //全域性變數影象寬 int Img_height ; //全域性變數影象寬 //2. VC影象資料傳遞函式,外部傳入影象緩衝資料引數 Imgbuf, 影象寬WIDTH, 影象高WIDTHHAL_PROCESS_API bool Hal_Read_Imagebuf(unsigned char * Imgbuf, int WIDTH, int HEIGHT) { try { Img_width =WIDTH; Img_height = HEIGHT; if ( Imgbuf == NULL ) return false; if (PHalconImage != NULL) { delete [] PHalconImage; } PHalconImage = new unsigned char[Img_width * Img_height]; /*注意hancon只處理8點陣圖像, 所以Imgbuf必須是8位的資料影象, (注意24點陣圖像處理需要分解三個8位R ,G, B緩衝區,利用halcon運算元gen_image3合成 資料處理方式一樣)*/ int i, j; for (i=0; i< Img_height; i++) { for (j=0; j< Img_width ; j++) { PHalconImage[i * Img_width + j ] = Imgbuf[i * Img_width + j]; } } } catch(...) { return false; } return true; } //3. halcon獲取很簡單 gen_image1(&Image, "byte", (HTuple)Img_width, (HTuple)Img_height, (long)PHalconImage); //4. 其它就halcon處理image方式一致