簡単な質問として:Javaで1つの配列から別の配列に1バイトおきにすばやくコピーする方法はありますか?
免責事項:私のコードはすでに十分に高速ですが、単純なforループよりも高速なネイティブメソッドがあるかどうか疑問に思いました。
問題の詳細(興味のある方):YUVバイト配列を3つの別々のバイト配列(Y、U、V)に分割しています。これまでにYUVアレイを(Android標準のNV21形式で)見たことがない場合、構造はYの高さ*幅バイトの後に(高さ*幅)/ 2バイトのUVデータ(私たちの目はクロミナンス解像度にあまり敏感ではありません)がインターリーブされます。arraycopy
以下を使用して、Yバイトの専用配列への転送を最適化するためにを使用することができます。
System.arraycopy(yuvs, 0, yArray, 0, imgSize.width*imgSize.height);
ただし、次のようにUV部分を専用アレイにコピーしています。
for (bt_y = 544; bt_y < previewSize.height*(3.0/2.0); bt_y++) {
for (bt_x = 0; bt_x < 960;) {
uArray[UVIndex] = yuvs[bt_y*960+bt_x++];
vArray[UVIndex++] = yuvs[bt_y*960+bt_x++];
}
}
どういうわけか「ストライド」変数または既知の間隔で要素を選択できるものを取り込むことができる方法はありますか?