private voidInintCamera()

{if (!isPreview)

{

camera=Camera.Open();

}if (camera != null && !isPreview)

{try{

Camera.Parameters parameters=camera.GetParameters();

parameters.SetPreviewSize(screenWidth, screenHeight);//设置大小//parameters.setPreviewFpsRange(20, 30);//每秒显示20~30帧

parameters.PictureFormat = Android.Graphics.ImageFormatType.Nv21;///设置图片格式

parameters.SetPictureSize(screenWidth, screenHeight);//parameters.Set("orientation", "portrait");//parameters.SetRotation(90);//旋转90度

parameters.PreviewFrameRate = 30; //每秒显示30帧

camera.SetPreviewDisplay(surfaceHolder); //通过SurfaceView显示取景画

camera.SetDisplayOrientation(90);//旋转90度//camera.SetPreviewCallback(new StreamIt(ipname, camera));

camera.SetParameters(parameters);

camera.StartPreview();//开始预览

camera.AutoFocus(null); //自动对焦

}catch(Exception e)

{string error =e.StackTrace;

}

}

}classMyThread : Java.Lang.Thread

{

}///

///试映回掉///

classStreamIt : Camera.IPreviewCallback

{stringipname;

Camera camera;public StreamIt(stringipname, Camera camera)

:base()

{this.camera =camera;this.ipname =ipname;

}public void OnPreviewFrame(byte[] data, Camera camera)

{

Camera.Size size=camera.GetParameters().PreviewSize;try{//调用image.compressToJpeg()将YUV格式图像数据data转为jpg格式

Android.Graphics.YuvImage image = new Android.Graphics.YuvImage(data, Android.Graphics.ImageFormatType.Nv21, size.Width, size.Height, null);if (image != null)

{

MemoryStream mstream= newMemoryStream();

image.CompressToJpeg(new Android.Graphics.Rect(0, 0, size.Width, size.Height), 80, mstream);

mstream.Flush();//启用线程把图片发送出去

}

}catch(Exception ex)

{

Log.Error("转换图片时出错", ex.Message);

}//throw new NotImplementedException();

}public voidDispose()

{throw newNotImplementedException();

}publicIntPtr Handle

{get { returncamera.Handle; }

}

}///

///定义SurfaceHolder回掉///

public classSurfaceHolderCallBack : ISurfaceHolderCallback

{

ActivityCameraMain _main;publicSurfaceHolderCallBack(ActivityCameraMain main)

:base()

{

_main=main;

}public void SurfaceChanged(ISurfaceHolder holder, Android.Graphics.Format format, int width, intheight)

{//throw new NotImplementedException();

}public voidSurfaceCreated(ISurfaceHolder holder)

{//throw new NotImplementedException();

_main.InintCamera();

}public voidSurfaceDestroyed(ISurfaceHolder holder)

{//throw new NotImplementedException();

if (_main.camera != null)

{if(_main.isPreview)

{

_main.camera.StopPreview();

_main.camera.Release();

_main.camera= null;

}//System.exit(0);

}

}voidIDisposable.Dispose()

{

;

}

IntPtr IJavaObject.Handle

{get { return((View)_main.sView).Handle; }

}

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐