作者gorocky (哇沙咪)
看板java
標題Re: [問題] JNI傳遞參數問題(Pointer)
時間Tue Nov 27 14:05:02 2012
自問自答好了(如果大家覺得是廢文,可以刪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