java方法
private native void argb2bgr(byte[] rgbSrc,byte[] bgrDesc);
public byte[] getPixelsBGR(Bitmap image) {
// calculate how many bytes our image consists of
int bytes = image.getByteCount();
ByteBuffer buffer = ByteBuffer.allocate(bytes); // Create a new buffer
image.copyPixelsToBuffer(buffer); // Move the byte data to the buffer
byte[] argbIn = buffer.array(); // Get the underlying array containing the data.
byte[] bgrOut = new byte[(argbIn.length / 4) * 3]; // Allocate for BGR
argb2bgr(argbIn,bgrOut);
return bgrOut;
}
native中
extern "C"
JNIEXPORT void JNICALL
Java_com_huaan_tablet_fireflyfacerecognition_MainActivity_argb2bgr(JNIEnv *env, jobject instance,
jbyteArray rgbSrc_,
jbyteArray bgrDesc_) {
jbyte *rgbSrc = env->GetByteArrayElements(rgbSrc_, NULL);
jbyte *bgrDesc = env->GetByteArrayElements(bgrDesc_, NULL);
int wh = env->GetArrayLength(rgbSrc_) / 4 ;
//#pragma omp parallel for
for (int i = 0; i < wh; ++i) {
bgrDesc[i * 3] = rgbSrc[i * 4 + 2]; //B
bgrDesc[i * 3 + 1] = rgbSrc[i * 4 + 1]; //G
bgrDesc[i * 3 + 2] = rgbSrc[i * 4 ]; //R
}
env->ReleaseByteArrayElements(rgbSrc_, rgbSrc, JNI_ABORT);
env->ReleaseByteArrayElements(bgrDesc_, bgrDesc, JNI_COMMIT);
}