我正在开发我的项目作为库(例如:proj A是测试Proj B的客户端是我的lib)现在我正在使用表面视图previewCallback现在我的每一帧都应该返回到Proj A.
在Proj A中,我保持ImageView查看每个帧,因为在Proj B中执行的previewCallback方法如何才能实现。
我在下面尝试过:
客户端 MainActivity:
mStartButton = (Button) findViewById(R.id.start_button);
mStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCameraPreview.setVisibility(View.VISIBLE);
CameraPreview.startPreview();
view();
}
});
mStopButton = (Button) findViewById(R.id.stop_button);
mStopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CameraPreview.stopPreview();
mCameraPreview.setVisibility(View.INVISIBLE);
}
});
}
public void view()
{
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if(CameraPreview.bmpret!=null) {
CameraPreview.imagePreview("");
imagePreview.setImageBitmap(CameraPreview.bmpret);
}
}
}, 500);
}
库 扩展了SurfaceView类:
public void startPreview() {
Log.i("CameraPreview", "startPreview");
Toast.makeText(mContext, "start preview", Toast.LENGTH_LONG).show();
if (!mCameraPreviewing) {
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
int cameraCount = Camera.getNumberOfCameras();
for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
Camera.getCameraInfo(camIdx, cameraInfo);
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
try {
mCamera = Camera.open(camIdx);
mCamera.setDisplayOrientation(90);
if (mCamera != null) {
try {
mCamera.setPreviewDisplay(mSurfaceHolder);
// mCamera.setPreviewCallback(this);
mCamera.setPreviewCallback(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// start = System.currentTimeMillis();
Camera.Parameters parameters = camera.getParameters();
Camera.Size size = parameters.getPreviewSize();
YuvImage image = new YuvImage(data, ImageFormat.NV21,
size.width, size.height, null);
Rect rectangle = new Rect();
rectangle.bottom = size.height;
rectangle.top = 0;
rectangle.left = 0;
rectangle.right = size.width;
ByteArrayOutputStream out2 = new ByteArrayOutputStream();
image.compressToJpeg(rectangle, 100, out2);
byte[] byteInputRot = out2.toByteArray();
bmpret = BitmapFactory.decodeByteArray(byteInputRot, 0, byteInputRot.length);
ByteArrayOutputStream out4 = new ByteArrayOutputStream();
bmpret.compress(Bitmap.CompressFormat.PNG, 100, out4);
a = byteInputRot.toString();
preview(bmpret);
但如果我返回方法,则只显示最后一张图片。
如何创建自己的previewCallback方法作为默认的Android lib。
如果有任何想法,请帮助我的朋友。