有啥巧妙的方法可以编辑相机预览和显示的内容吗?

Posted

技术标签:

【中文标题】有啥巧妙的方法可以编辑相机预览和显示的内容吗?【英文标题】:Is there any neat way I can edit the content of camera preview and show?有什么巧妙的方法可以编辑相机预览和显示的内容吗? 【发布时间】:2017-10-16 12:21:50 【问题描述】:

我想编辑相机预览流,并直接在屏幕上显示。现在我可以通过AVCaptureVideoDataOutput获取内容,但是如何编辑它并使用编辑后的流而不是原始流呢?我已经尝试将CMSampleBuffer转换为UIImage并显示在UIImageView中,速度还可以。但是我想知道是否有更好的方法来实现它。

提前致谢!

【问题讨论】:

【参考方案1】:

我不得不做类似的事情。最后,我只是在视频流顶部的 UIImageView 中添加了一个 CALayer。

例如:添加水印徽标(Xamarin 代码 - 扩展方法),其中 parentLayer 将是 UIImageView.Layer

    public static void AddWatermarkLayer(this CALayer parentLayer, string watermarkImagePath, nfloat watermark_border, nfloat watermark_size)
    
        nfloat watermark_x = parentLayer.Frame.Width - (watermark_size + watermark_border);
        nfloat watermark_y = watermark_border;

        var watermarkImage = UIImage.FromFile(watermarkImagePath); //

        CALayer aLayer = new CALayer();
        aLayer.Contents = watermarkImage.CGImage;
        aLayer.Frame = new CGRect(watermark_x, watermark_y, watermark_size, watermark_size);
        aLayer.Opacity = 1f; 
        parentLayer.AddSublayer(aLayer);
    

如果您需要实际保存此“已编辑”流,则必须使用 AVMutableVideoComposition 应用所需更改并将其保存到文件中。

【讨论】:

以上是关于有啥巧妙的方法可以编辑相机预览和显示的内容吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 相机预览是横向的

Android - 相机预览是横向的

如何在没有从服务或线程预览的情况下进行相机捕捉?

是否可以裁剪相机预览?

Android 自定义相机 Camera 预览变形拉伸问题

如何在 SurfaceView 上显示相机预览?