推 QQ29:是不是要用到傳說中的COM Interop... 05/03 00:34
→ diabloevagto:不太清楚..google都找不到= = 05/03 00:38
※ 編輯: diabloevagto 來自: 140.125.20.92 (05/03 00:39)
推 QQ29:你指的回傳無法成功 是甚麼意思啊 你是怎麼呼叫到native c++ 05/03 00:43
→ QQ29:的呢? 直接dllimport嗎 05/03 00:44
→ QQ29:我之前是用COM Interop, managed C# new一塊buffer 05/03 00:46
→ QQ29:[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] 05/03 00:47
→ purincess:回傳圖的type是什麼? 如果你接受R+G+B三個byte的byte ar 05/03 00:47
→ QQ29:C#這種怪語法去pass到C++ dll去做一些操作 也不用return東西 05/03 00:47
→ purincess:ry的話在C#分配好空間 C++ dll負責塞就好... 05/03 00:47
→ purincess:QQ29大大搶先惹XD! 05/03 00:48
推 EdisonX:請教,gcc/g++ 編的dll,給 vc / c# 可用 ? 05/03 00:52
我希望能夠從c++回傳一張圖給C#,因為我要把處理之後的影像秀出在picturebox
之前把圖從c#丟到c++是直接用DllImport傳bitmapdata.scan0過去然後用mat.data去接
現在要把圖從c++丟回c#想說也能直接這樣丟...
但一直失敗= =
其實用什麼方式回傳都可以,只要能正常秀圖就好
→ diabloevagto:toEdisonX:可以 05/03 01:03
→ james732:建議說明是怎麼個"失敗"法 05/03 01:05
→ diabloevagto:其實我一點頭緒都沒有Orz 05/03 01:08
請問QQ29大大有成功寫過類似的程式嗎?
不知是否能借我參考看看該怎樣寫...
※ 編輯: diabloevagto 來自: 114.41.86.28 (05/03 01:38)
→ purincess:你的dll的func有宣告是stdcall的calling convention嗎 05/03 02:13
→ purincess:建議你先分離"dll工作傳回值"這件事情 例如做一個最簡 05/03 02:13
→ purincess:單的 int add(int* in1, int* in2, int* out) 這樣子 05/03 02:13
→ diabloevagto:p大,抱歉了...不太懂你說的那個東西 05/03 02:26
→ diabloevagto:但簡單的傳兩個值,及傳圖都有成功測試過了 05/03 02:27
→ purincess:所以DLL_Add跟test都ok嗎? 05/03 02:31
→ purincess:如果是showPic的話你的C#那邊應該要有cv::Mat對應的 05/03 02:31
→ purincess:type definiation 然後我覺得接參數都要用pointer接 05/03 02:31
→ purincess:C#那邊加ref這個keyword(吧我記得orz...這邊不確定) 05/03 02:32
→ purincess:這邊應該沒有要用COM Interop吧? 不然接物件只能用 05/03 02:32
→ purincess:IDispatch* 接 這可能就會回到前面QQ29大大的範圍了QQ 05/03 02:32
→ diabloevagto:那幾個程式是都ok可以跑,傳過去沒有問題 05/03 02:45
→ diabloevagto:問題就在於從c++傳回來...我想法是一樣傳scan0過去 05/03 02:46
→ diabloevagto:然後把他指向新的圖的mat.data,但程式直接當掉... 05/03 02:46
→ purincess:你是說你要改scan0這個pointer裡面存的address還是它 05/03 02:53
→ purincess:指到的記憶體空間的內容@@? 05/03 02:53
→ purincess:如果是後者~你lockbits不能傳imagelockmode.readonly~ 05/03 03:01
→ purincess:要傳readwrite呀 XD 05/03 03:02
→ purincess:3點了QQ 睡覺! purincess.signOut(); 05/03 03:02
→ diabloevagto:如果能夠直接改指向的位址當然最快 05/03 03:09
→ diabloevagto:不然要一個一個寫進去比較花時間 05/03 03:09
→ diabloevagto:我太懂c#語法,這個是看到有人寫這樣就拿來用 05/03 03:10
→ diabloevagto:請問我該如何改才能夠修改呢?? 05/03 03:10
→ diabloevagto:另外請教是否有方式能少到bitmapdata??能直接用 05/03 03:11
→ diabloevagto:bitmap型態呢?這樣應該能在省一點時間吧 05/03 03:11
c# code http://ideone.com/zZ9Mg
c++ code http://ideone.com/UcoLa
我這樣雖然不會出錯了
但是圖片都是整片黑色的...
不知道是不是沒有傳回來...
※ 編輯: diabloevagto 來自: 140.125.20.92 (05/03 14:35)
→ purincess:你的stride是2*960 然後imread第二個參數是0 會讓我覺得 05/03 17:55
→ purincess:你的format8ppindexed應該要是Format16bppGrayScale @@ 05/03 17:56
→ purincess:但我不知道imread第二個參數0的data長怎樣orz 我只用過 05/03 17:56
→ purincess:正數讀彩圖QQ 05/03 17:56
→ diabloevagto:imread設定0表示讀進來的是256灰階 05/03 21:17
→ diabloevagto:用Format8bppIndexed沒錯,我改成你那個就出錯了 05/03 21:17
→ diabloevagto:我是猜測會不會是pixel資訊沒有回傳回來 05/03 21:18
→ diabloevagto:stride我用i*960,i從1~20都是黑色的 05/03 21:38
→ purincess:嗯嗯 QQ 05/03 21:49
→ diabloevagto:真的是囧到底 05/03 22:06