天天看點

Bitmap 轉 BGR

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);
}
           

繼續閱讀