class MyCamera implements PreviewCallback
{
@SuppressLint("NewApi")
@Override
public void onPreviewFrame(byte[] data, Camera camera)
{
Camera.Parameters ps = camera.getParameters();
int[] imgs = new int[ps.getPreviewSize().width * ps.getPreviewSize().height];
try
{
Log.i("tyty", ps.getPreviewSize().width + "=====" + ps.getPreviewSize().height);
//doyouself
}
catch (Exception e)
{
Log.i("tyty", "Exception new bmp" + e.toString());
return;
}
if (bmp != null)
{
Canvas canvas = surfaceHolder.lockCanvas();
try
{
if (canvas != null)
{
Log.i("tyty", "bmp已画图");
canvas.drawBitmap(bmp, 0, 0, null);
}
}
catch (Exception e)
{
Log.i("tyty", "Exception draw bmp" + e.toString());
}
finally
{
if (canvas != null)
{
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
camera.addCallbackBuffer(data);
Log.i("tyty", "回调");
}
}
camera = Camera.open(0);
camera.setDisplayOrientation(90);
Camera.Parameters parameters = camera.getParameters();
MediaActionSound actionSound = new MediaActionSound();
parameters.setPreviewSize(720, 1280);
parameters.setPreviewFpsRange(4, 10);
parameters.setPictureFormat(ImageFormat.JPEG);
parameters.set("jpeg-quelity", 85);
parameters.setPictureSize(720, 1280);
if (parameters.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE))
{
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
}
int[] textures = new int[1];
GLES20.glGenTextures(1, textures, 0);
surfaceTexture = new SurfaceTexture(textures[0]);
try
{
camera.setPreviewTexture(surfaceTexture);
camera.setPreviewCallback(new MyCamera());
camera.startPreview();
}
catch (IOException e)
{
Log.i("tyty", e.toString());
e.printStackTrace();
}
上面的代码片段是初始化摄像头,没有什么好多说的,一般是注意一些属性照写。
class MyCamera implements PreviewCallback
{
@SuppressLint("NewApi")
@Override
public void onPreviewFrame(byte[] data, Camera camera)
{
Camera.Parameters ps = camera.getParameters();
int[] imgs = new int[ps.getPreviewSize().width * ps.getPreviewSize().height];
try
{
Log.i("tyty", ps.getPreviewSize().width + "=====" + ps.getPreviewSize().height);
//doyouself
}
catch (Exception e)
{
Log.i("tyty", "Exception new bmp" + e.toString());
return;
}
camera.addCallbackBuffer(data);
Log.i("tyty", "回调");
}
}
这样想,那只要有方法设置preview活跃就行了?
然后我用setPreviewTexture试了一下,没有想到可以了。虽然找不出官方的解释,也只能对这样做就解决问题进行脑补了。。。。。
在onpreviewframe里面添加setPreviewTexture,把 原来的texture设置进去就ok了。
菜鸟耗时一天才找到问题所在,唉。。。著文留念 顺便下班回家。