2016-04-25 19 views
0

私がやっていることは、Javaから直接2dのC++ウィンドウにポリゴンを描画することです。私はポリゴンのx点とy点を含む2つの配列を持っています。配列を印刷するとき、配列は両方の配列の最初の要素を除いて正確に表示されます。私は自分自身それが動作ポイントを提供している場合ではなくjintArraysと、JNI jintArrayの最初の値が正しくありません

start: 693635144, 693771992 | Path: 693635144, 693771992 - 0, 0 - 718079568, 693635144 - | numPoints: 3 
start: 35, 29 | Path: 35, 29 - 250, 350 - 300, 400 - | numPoints: 3 
start: 35, 32 | Path: 35, 32 - 250, 350 - 300, 400 - | numPoints: 3 
start: 35, -1437401059 | Path: 35, -1437401059 - 250, 4 - 300, 2949120 - | numPoints: 3 
start: 35, 39573896 | Path: 35, 39573896 - 250, 1 - 300, 0 - | numPoints: 3 
start: 47, 44 | Path: 47, 44 - 250, 350 - 300, 400 - | numPoints: 3 
start: 53, 47 | Path: 53, 47 - 250, 350 - 300, 400 - | numPoints: 3 
start: 53, 39589128 | Path: 53, 39589128 - 250, 1 - 300, 0 - | numPoints: 3 
start: 56, 53 | Path: 56, 53 - 250, 350 - 300, 400 - | numPoints: 3 
start: 56, 50 | Path: 56, 50 - 250, 350 - 300, 400 - | numPoints: 3 
start: 39591176, 39591176 | Path: 39591176, 39591176 - 1, 12 - 99607256, 0 - | numPoints: 3 
start: 71, 59 | Path: 71, 59 - 250, 350 - 300, 400 - | numPoints: 3 
start: 71, 68 | Path: 71, 68 - 250, 350 - 300, 400 - | numPoints: 3 

:Java側で

Polygon fillPoly = new Polygon(new int[] {200, 250, 300}, new int[] {400, 350, 400}, 3); 
// 200, 400 | 250, 350 | 300, 400 

g.fillPolygon(fillPoly); 

//... 

public void fillPolygon(final Polygon polygon) { 
    fillPoly(polygon.xpoints, polygon.ypoints, polygon.npoints); 
} 

private native void fillPoly(final int[] xpoints, final int ypoints[], final int numPoints); 

しかしdata文字列の出力は次のようなものです。私は正しくjint*のint値を取得し、それらからD2D1::Point2Fを作成する方法はありますか?

+0

ネイティブコードの 'xpoints'と' ypoints'とは何ですか? 'xpoint' /' ypoint'と 'jxpoints' /' jypoints'が何であるかを見ることができますが、どこにでも 'xpoints' /' ypoints'が宣言されているわけではありません。 – Michael

+0

ヘッダ情報を追加しました – MircoProgram

+0

私はあなたが示したC++コードのどこにでも 'xpoints'と' ypoints'は宣言されていません。 – Michael

答えて

0

あなたのコードは、jxpointsへのポインタ、後で使用するためのjypointsを格納し、Java配列を解放します。これらのポインターがランダムに変更されたデータを指していることは間違いありません。おそらく座標を永続的なC++配列にコピーする必要があります。 via shared_pointer<vector<jint>>

vector<jint> jxpoints(numPoints); 
env->GetIntArrayRegion(xpoint, 0, numPoints, &jxpoints[0]); 
+1

ありがとう、今の魅力のように動作します! – MircoProgram

関連する問題