You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对包含相机预览、地图、TextView的布局截图(解决相机区域白屏问题)

问题原因

相机预览默认通过SurfaceView/TextureView实现,走硬件加速渲染通道,普通的View绘图缓存截图方式只能捕获软件绘制的View内容,无法拿到硬件渲染的预览帧,因此相机区域显示为全白。

解决方案
  • 优先使用TextureView承载相机预览
    TextureView支持直接获取当前渲染的预览帧,截图时将预览帧和布局其他元素的截图合并即可,首先在你的camera_preview FrameLayout中添加TextureView作为预览承载控件,替换原来的SurfaceView方案,之后执行截图逻辑:
    // 1. 获取rl_photo布局内地图、文字等元素的截图
    val layoutBitmap = Bitmap.createBitmap(rl_photo.width, rl_photo.height, Bitmap.Config.ARGB_8888)
    val layoutCanvas = Canvas(layoutBitmap)
    rl_photo.draw(layoutCanvas)
    
    // 2. 获取TextureView渲染的相机预览帧
    val previewBitmap = textureView.bitmap
    
    // 3. 合并两个Bitmap得到最终截图
    val resultBitmap = Bitmap.createBitmap(rl_photo.width, rl_photo.height, Bitmap.Config.ARGB_8888)
    val mergeCanvas = Canvas(resultBitmap)
    // 先画底层的相机预览
    mergeCanvas.drawBitmap(previewBitmap, 0f, 0f, null)
    // 再画上层的地图、文字布局
    mergeCanvas.drawBitmap(layoutBitmap, 0f, 0f, null)
    
    // 后续直接保存resultBitmap即可
    
  • 若必须使用SurfaceView承载预览
    可以通过ImageReader/PixelReader获取当前Surface渲染的预览帧,之后执行和上述逻辑一致的合并操作即可。
  • 注意事项
    截图操作需要在相机预览帧渲染完成、布局绘制完成之后执行,避免出现内容不全的问题。

内容的提问来源于stack exchange,提问作者pawan kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 00:51:01