看板 java 關於我們 聯絡資訊
自問自答好了(如果大家覺得是廢文,可以刪XD) ==Java== Pointer Image1=Ins.cvLoadImage(FilePath1, 1); BufferedImage bufimg=t.ToBufferImage(Pointer.nativeValue(Image1)); ... public native BufferedImage ToBufferImage(long img); ... ==C== JNIEXPORT jobject JNICALL Java_Test_ToBufferImage (JNIEnv *env, jobject obj, jlong l) { IplImage *img=(IplImage *)l; CvSize size = cvGetSize(img); ... } ※ 引述《gorocky (哇沙咪)》之銘言: : JNI和JNA可以同時運行嗎? : 範例 : ==Java== : public class Test{ : public static void main(String[] args) { : ... : com.sun.jna.Pointer Image1=Ins.cvLoadImage("dog.jpg", 1); : Test t=new Test(); : BufferedImage bufimg=t.ToBufferImage(Image1); : } : public native BufferedImage ToBufferImage(com.sun.jna.Pointer img); : static{ : System.loadLibrary("opencv_core243"); : System.loadLibrary("opencv_highgui243"); : System.loadLibrary("opencv_imgproc243"); : System.loadLibrary("t");//透過GCC產生的DLL檔 : } : } : ==C== : JNIEXPORT jobject JNICALL Java_Test_ToBufferImage : (JNIEnv *env, jobject obj, IplImage *img) : { : CvSize size = cvGetSize(img); : ... : jobject bufferedImage=.... : ... : return bufferedImage; : } : 問題: : 不知怎麼讓Java傳遞com.sun.jna.Pointer 到C當中? : 如果JNI和JNA不能同時運行的話,試過用Jlong的方式,但也失效? : 不知哪出問題? : ==Java== : BufferedImage bufimg=t.ToBufferImage(Image1.getLong(0)); : public native BufferedImage ToBufferImage(long img); : ==C== : JNIEXPORT jobject JNICALL Java_Test_ToBufferImage : (JNIEnv *env, jobject obj, jlong l) : { : IplImage *img; : *img=l; : } : 是在C轉換的地方寫錯呢?還是不是該用Jlong的方式轉? : 能否請板上的大大指點給方向?謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.61.97.145
PsMonkey:雖然看不太明白,不過總比自問自解但是不答的人好 (y) 11/27 15:29
LaPass:沒碰連結到C的部分.... 看不懂.... 我好弱 QQ.... 11/27 15:40
stimim:原本直接傳 Image1 的話,會是一個 jobject ,並不是真的指 11/29 13:56