【发布时间】:2015-04-24 04:11:14
【问题描述】:
我有一个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);
}
}
但我得到以下异常:
Exception locking surface
java.lang.IllegalArgumentException
at android.view.Surface.nativeLockCanvas(Native Method)
at android.view.Surface.lockCanvas(Surface.java:243)
Google 说由于画布未锁定而发生错误,但我总是将其锁定。
如何在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
};
【问题讨论】:
标签: java android colors filter camera