当前位置: 首页 > news >正文

Flutter - 原生交互 - 相机Camera - 曝光,缩放,录制视频

曝光

Flutter上CupertinoSlider组件的样式是iOS上的Slider,使用该组件控制曝光量,
Camera插件提供的API是CameraController

Future<double> setExposureOffset(double offset) async {
...
}

最后调用iOS端的系统方法控制曝光值

- (void)setExposureTargetBias:(float)bias completionHandler:(nullable void (^)(CMTime syncTime))handler API_AVAILABLE(ios(8.0), macCatalyst(14.0), tvos(17.0)) API_UNAVAILABLE(macos, visionos);
class TakePictureScreenState extends State<TakePictureScreen> {/// 设置默认值double currentExposure = 0.0;/// 是否显示曝光Slider组件bool _showedExposure = false;.../// 使用CupertinoSliderWidget showExposure() {if (_showedExposure) {return SizedBox(height: 44,width: MediaQuery.of(context).size.width,child: CupertinoSlider(/// 滑动Slider时触发的事件onChanged: (value) {setState(() {/// 调整相机的曝光值_controller.setExposureOffset(value);currentExposure = value;});},min: -3, /// 设置作用范围max: 3,value: currentExposure, /// 当前Slider显示的值),);}return SizedBox.shrink();}
}
202506131634.gif

两指手势缩放

系统的相机可以双指进行缩放操作,在Flutter中可以在GestureDetector来实现

/// 最小缩放比例
double _minAvailableZoom = 1.0;
/// 最大缩放比例
double _maxAvailableZoom = 1.0;
/// 记录当前的缩放比例
double _currentScale = 1.0;
/// 当前的基础值
double _baseScale = 1.0;Listener(onPointerDown: (_) => _pointers++,onPointerUp: (_) => _pointers--, // 用来判断是否双指child: CameraPreview(_controller,// Creates a widget that defers its building until layout.// 布局完成再创建child: LayoutBuilder(builder: (BuildContext context, BoxConstraints constraints) {return GestureDetector(// Opaque targets can be hit by hit tests, causing them to both receive events within their bounds and prevent targets visually behind them from also receiving events.// 相机Widget能收到手势behavior: HitTestBehavior.opaque, // 设置开始缩放事件onScaleStart: _handleScaleStart,// 设置缩放值变化事件

相关文章:

  • FPGA基础 -- Verilog语言要素之整型数、实数、字符串
  • Redis学习笔记——黑马点评 消息队列25-30
  • LeetCode-345. 反转字符串中的元音字母
  • (十五)深入了解 AVFoundation - 编辑:音视频裁剪与拼接
  • Python 脚本,用于将 PDF 文件高质量地转换为 PNG 图像
  • 设计模式:单例模式多种方式的不同实现
  • http测试方法三
  • 【动手学深度学习】3.7. softmax回归的简洁实现
  • 答题考试系统小程序ThinkPHP+UniApp
  • 【科研绘图系列】R语言绘制论文组图系列(multiple plots)
  • ai智能题库小程序题库刷题系统框架设计
  • 在Kibana上新增Elasticsearch生命周期管理
  • 【Spark征服之路-2.8-Spark-Core编程(四)】
  • Qwen3-Embedding-Reranker本地部署教程:8B 参数登顶 MTEB 多语言榜首,100 + 语言跨模态检索无压力!
  • 奇异值分解
  • 深度学习:人工神经网络基础概念
  • 数据驱动SEO:8种自动化实践,精准提升排名与监控效能
  • ECharts:柱状图背景虚线
  • 16. 线性表的链式表示和实现(5)
  • git如何强制拉取远程分支覆盖本地分支
  • php网站如何做特效/打广告在哪里打最有效
  • 网站建设技术招聘/网站统计数据
  • 一家专门做动漫的网站/怎么让百度搜出自己
  • 静态网站说明书/域名注册查询入口
  • 富连网网站开发/深圳seo
  • 品牌展示设计网站/企业qq