<分区>
我有一个 CameraPreview
类。它扩展了 SurfaceView
并实现了 SurfaceHolder.Callback
和 PreviewCallback
。我想更改相机发送到 SurfaceView
的图像。它应该在代码的以下部分完成:
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
Log.d(TAG, "onPreviewFrame");
Canvas canvas = mHolder.lockCanvas();
synchronized (mHolder) {
Paint p = new Paint();
p.setColor(Color.RED);
canvas.drawRect(0, 0, 100, 200, p);
mHolder.unlockCanvasAndPost(canvas);
}
}
但我得到以下异常:
异常锁定表面
java.lang.IllegalArgumentException异常
在 android.view.Surface.nativeLockCanvas( native 方法)
在 android.view.Surface.lockCanvas(Surface.java:243)
谷歌说错误发生是因为 Canvas 未锁定,但我总是保持锁定状态。
如何在 SurfaceView
上绘制图像?
我创建了一个对现有图像应用滤色器的函数,我希望这段代码是正确的。
@Override
protected void overDraw(Canvas canvas) {
Paint p = new Paint();
ColorMatrixColorFilter fl = new ColorMatrixColorFilter(new ColorMatrix(filter));
p.setColorFilter(fl);
canvas.drawPaint(p);
Log.d(TAG, "overDraw");
}
float[] filter = new float[]
{
//r, g, b, a, k
0.33,0.33,0.33,0,0, //r
0.33,0.33,0.33,0,0, //g
0.33,0.33,0.33,0,0, //b
0,0,0,1,0, //a
};