创建skiasharp相机叠加xamarin ios

时间:2017-08-15 18:09:11

标签: ios xamarin camera overlay

我正在尝试创建一个应用程序,在iPhone(本机)上的相机的叠加层上使用skiasharp。我的相机流看起来很漂亮,但没有叠加。创建流的初始viewcontroller看起来像:

public async  override void ViewDidLoad()
    {
        base.ViewDidLoad();
        await AuthorizeCameraUse();

        imagePicker = new UIImagePickerController();

        // set our source to the camera
        imagePicker.SourceType = UIImagePickerControllerSourceType.Camera;

        // set
        imagePicker.MediaTypes = new string[] { "public.image" };



        imagePicker.CameraOverlayView = new CameraOverlayView();

        imagePicker.ModalPresentationStyle = UIModalPresentationStyle.CurrentContext;
      .   . .

我的CameraOverlayView看起来像:

public class CameraOverlayView :SKCanvasView
{
    public CameraOverlayView() : base()
    {
        Initialize();
    }
    public CameraOverlayView(CGRect frame) : base(frame) {
        Initialize();
    }
    SKPaint paint = new SKPaint
    {
        Style = SKPaintStyle.Fill,
         Color = SKColors.Red,
        StrokeWidth = 25
    };

    protected void Initialize()
    {

        this.PaintSurface += CameraOverlayView_PaintSurface;
        //using (var surface = SKSurface.Create( 640, 480, SKColorType.Rgba8888, SKAlphaType.Premul))
        //{
        //    SKCanvas myCanvas = surface.Canvas;
        //    myCanvas.DrawCircle(300, 300, 100, paint);
        //    // Your drawing code goes here.
        //}
    }

    private void CameraOverlayView_PaintSurface(object sender, SKPaintSurfaceEventArgs e)
    {
        var surface = e.Surface;
        // then we get the canvas that we can draw on
        var canvas = surface.Canvas;
        // clear the canvas / view
        canvas.Clear(SKColors.White);


        // DRAWING SHAPES

        // create the paint for the filled circle
        var circleFill = new SKPaint
        {
            IsAntialias = true,
            Style = SKPaintStyle.Fill,
            Color = SKColors.Blue
        };
        // draw the circle fill
        canvas.DrawCircle(100, 100, 40, circleFill);
    }
}

我的Paint事件永远不会被触发,如果我用简单的例子运行这个代码就可以了。

1 个答案:

答案 0 :(得分:0)

感谢Russ Fustino帮助我发现我没有使用CameraOverlayView (CGRect frame) : base (frame)构造函数,因此没有调用DrawInSurface重载。 没有什么可以吸引的。当我这样做时,油漆事件被解雇了。