0

(version:android 4.1) カメラのプレビュー開始時のエフェクトを追加したい。しかし、 onPreviewFrame 関数が呼び出されなかったのと同じです。setdisplaypreview() メソッドを使用すると、onPreviewFrame が呼び出されます。しかし、プレビュー用の効果を追加する方法はありません。

ということで、うまくいく方法を教えてください。ご協力いただきありがとうございます。

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mSurface = (SurfaceView) findViewById(R.id.surfaceview);
    //SurfaceView surfaceview = new SurfaceView(this);
    mHolder = mSurface.getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
     initCamera();
}

void openDevice() {
    if (mCamera == null) {
        mCamera = Camera.open();
    }
}

private void initCamera()  {
    openDevice();
    Camera.Parameters parameter = mCamera.getParameters();
    parameter.setPictureSize(PREVIEW_WIDTH, PREVIEW_HEIGHT);
    parameter.setPreviewFormat(ImageFormat.JPEG);
    mCamera.setParameters(parameter);
    mCamera.setDisplayOrientation(90);
}

private void drawBitmap(Bitmap map) {

    Canvas canvas = mHolder.lockCanvas();
    if (null != canvas) {
        Paint paint = new Paint();
        if (null != canvas) {
            canvas.drawBitmap(map, null, mDestRect, paint);
            mSurface.getHolder().unlockCanvasAndPost(canvas);
        }
        mHolder.unlockCanvasAndPost(canvas);
    }
}
    @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    if (holder.getSurface() == null) {
        return;
    }
    mHolder = holder;
    if (mCamera == null) {
        return;
    }
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    if( null != mCamera){

        mCamera.setPreviewCallback(mPreviewCallBack);
        mCamera.startPreview();
    }
}
    Camera.PreviewCallback mPreviewCallBack = new Camera.PreviewCallback() {

    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
        int format = camera.getParameters().getPreviewFormat();
        Size s = camera.getParameters().getPreviewSize();

        Log.e(TAG, "xxxxxxxxxx");
        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
        try {
            byteStream.write(data);
            //TODO I have add some effect here.

            mOutBitmap
                    .compress(Bitmap.CompressFormat.JPEG, 100, byteStream);
            byteStream.close();
                           //Draw the preview image.
            drawBitmap(mOutBitmap);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
};
4

1 に答える 1