0

私はこのコードを持っています:

protected Bitmap processFrame(byte[] data) {
    Mat mat = new Mat(mFrameHeight, mFrameWidth, CvType.CV_8UC3);
    mat.put(0, 0, data);

    //process mat with native code

    Utils.matToBitmap(mat, mBitmap);

    return mBitmap;
}


private Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() {

    public void onPreviewFrame(byte[] data, Camera camera) {
        Bitmap bmp = processFrame(data);

        if (bmp != null) {
            //draw bmp
        }
    }
};

ある時点で、ビットマップを次のように定義します。

mBitmap = Bitmap.createBitmap(mFrameWidth, mFrameHeight, Bitmap.Config.RGB_565);

その結果、同じカメラ フレームがキャプチャされますが、水平方向に 3 回繰り返されるグレー スケールで、CvType.CV_8UC4 を試してみると、代わりに 4 回繰り返されます。

同じ手順を使用して、画像全体をそのまま表示する必要があります

誰かが間違いをキャッチしますか??

4

1 に答える 1

1

この方法を変更しただけです..解決しました..

protected Bitmap processFrame(byte[] data) {

    Mat mYuv = new Mat( mFrameHeight + mFrameHeight/2, mFrameWidth, CvType.CV_8UC1);
    mYuv.put(0, 0, data);

    Mat mRGB = new Mat();

    Imgproc.cvtColor(mYuv, mRGB, Imgproc.COLOR_YUV2RGB_NV21, 3);

    ProcessFrame(mRGB.getNativeObjAddr(), mRGB.width(), mRGB.height());

    Utils.matToBitmap(mRGB, mBitmap);

    return mBitmap;
}
于 2012-12-19T06:52:14.557 に答える