iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >MauiBlazor使用摄像头实现代码
  • 893
分享到

MauiBlazor使用摄像头实现代码

MauiBlazor摄像头MauiBlazor摄像头 2023-01-12 12:01:35 893人浏览 八月长安
摘要

由于Maui blazor中界面是由WEBView渲染,所以再使用Android的摄像头时无法去获取,因为原生的摄像头需要绑定界面组件所以我找到了其他的实现方式,通过WebView使

由于Maui blazor中界面是由WEBView渲染,所以再使用Android的摄像头时无法去获取,因为原生的摄像头需要绑定界面组件
所以我找到了其他的实现方式,通过WebView使用js调用设备摄像头 支持多平台兼容目前测试了Android 和PC 由于没有iocMac无法测试 大概率是兼容可能需要动态申请权限

1. 添加js方法

我们再wwwroot中创建一个helper.js的文件并且添加以下俩个js函数
index.html中添加<script src="helper.js"></script>引入js


function setImgSrc(dest,videoId, srcId, widht, height) {
    let video = document.getElementById(videoId);
    let canvas = document.getElementById(canvasId);
    console.log(video.clientHeight, video.clientWidth);
   
    canvas.getContext('2d').drawImage(video, 0, 0, widht, height);

    canvas.toBlob(function (blob) {
        var src = document.getElementById(srcId);
        src.setAttribute("height", height)
        src.setAttribute("width", widht);
        src.setAttribute("src", URL.createObjectURL(blob))
    }, "image/jpeg", 0.95);
}

function startVideo(src) {
    if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
        navigator.mediaDevices.getUserMedia({ video: true }).then(function (stream) {
            let video = document.getElementById(src);
            if ("srcObject" in video) {
                video.srcObject = stream;
            } else {
                video.src = window.URL.createObjectURL(stream);
            }
            video.onloadedmetadata = function (e) {
                video.play();
            };
            //mirror image
            video.style.webkitTransfORM = "scaleX(-1)";
            video.style.transform = "scaleX(-1)";
        });
    }
}

然后各个平台的兼容

android:

Platforms/Android/AndroidManifest.xml文件内容

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="Http://schemas.android.com/apk/res/android">
	<application android:allowBackup="true" android:supportsRtl="true"></application>
	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
	<uses-permission android:name="android.permission.INTERNET" />
	<!--相机权限-->
	<uses-permission android:name="android.permission.CAMERA" android:required="false"/>
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
	<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
	<!--相机功能-->
	<uses-feature android:name="android.hardware.camera" />
	<!--音频录制权限-->
	<uses-permission android:name="android.permission.RECORD_AUDIO" />
	<!--位置权限-->
	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
	
	<!-- Needed only if your app targets Android 5.0 (api level 21) or higher. -->
	<uses-feature android:name="android.hardware.location.gps" />

	<queries>
		<intent>
			<action android:name="android.intent.action.VIEW" />
			<data android:scheme="http"/>
		</intent>
		<intent>
			<action android:name="android.intent.action.VIEW" />
			<data android:scheme="https"/>
		</intent>
	</queries>
</manifest>

Platforms/Android/MainActivity.cs文件内容

[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfiGChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
public class MainActivity : MauiAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Platform.Init(this, savedInstanceState);
        // 申请所需权限 也可以再使用的时候去申请
        ActivityCompat.RequestPermissions(this, new[] { Manifest.Permission.Camera, Manifest.Permission.RecordAudio, Manifest.Permission.ModifyAudiOSettings }, 0);
    }
}

MauiWebChromeClient.cs文件内容

#if ANDROID
using Android.Webkit;
using Microsoft.Aspnetcore.Components.WebView.Maui;

namespace MainSample;

public class MauiWebChromeClient : WebChromeClient
{
    public override void OnPermissionRequest(PermissionRequest request)
    {
        request.Grant(request.GetResources());
    }
}

public class MauiBlazorWebViewHandler : BlazorWebViewHandler
{
    protected override void ConnectHandler(Android.Webkit.WebView platformView)
    {
        platformView.SetWebChromeClient(new MauiWebChromeClient());
        base.ConnectHandler(platformView);
    }
}

#endif

MauiProgram.cs中添加以下代码;如果没有下面代码会出现没有摄像头权限
具体在这个 issue体现

#if ANDROID
        builder.ConfigureMauiHandlers(handlers =>
        {
            handlers.AddHandler<IBlazorWebView, MauiBlazorWebViewHandler>();
        });
#endif

以上是android的适配代码 pc不需要设置额外代码 ios和mac不清楚

然后编写界面

@page "/" @*界面路由*@

@inject IJSRuntime JSRuntime @*注入jsRuntime*@

@if(OpenCameraStatus) @*在摄像头没有被打开的情况不显示video*@
{
    <video id="@VideoId" width="@widht" height="@height" />
    <canvas class="d-none" id="@CanvasId" width="@widht" height="@height" />
}
<button @onclick="" style="margin:8px">打开摄像头</button> 
@*因为摄像头必须是用户手动触发如果界面是滑动进入无法直接调用方法打开摄像头所以添加按钮触发*@
<button style="margin:8px">截图</button> @*对视频流截取一张图*@

<img id="@ImgId" />

@code{
    private string CanvasId;
    private string ImgId;
    private string VideoId;
    private bool OpenCameraStatus;
    private int widht = 320;
    private int height = 500;

    private async Task OpenCamera()
    {
        if (!OpenCameraStatus)
        {
            // 由于打开摄像头的条件必须是用户手动触发如果滑动切换到界面是无法触发的
            await JSRuntime.InvokeVoidAsync("startVideo", "videoFeed");
            OpenCameraStatus = true;
            StateHasChanged();
        }
    }

    protected override async Task OnInitializedAsync()
    {
        // 初始化id
        ImgId = Guid.NewGuid().ToString("N");
        CanvasId = Guid.NewGuid().ToString("N");
        VideoId = Guid.NewGuid().ToString("N");
        await base.OnInitializedAsync();
    }

    private async Task Screenshot()
    {
        await JSRuntime.InvokeAsync<String>("setImgSrc", CanvasId,VideoId, ImgId, widht, height);
    }
}

然后可以运行程序就可以看到我们的效果了

示例代码:gitee GitHub

到此这篇关于Maui Blazor 使用摄像头实现的文章就介绍到这了,更多相关Maui Blazor 摄像头内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: MauiBlazor使用摄像头实现代码

本文链接: https://www.lsjlt.com/news/177504.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MauiBlazor使用摄像头实现代码
    由于Maui Blazor中界面是由WebView渲染,所以再使用Android的摄像头时无法去获取,因为原生的摄像头需要绑定界面组件所以我找到了其他的实现方式,通过WebView使...
    99+
    2023-01-12
    Maui Blazor 摄像头 Maui Blazor 摄像头
  • WPF实现调用本机摄像头的示例代码
    此项目使用了OpenCVSharp加载本地摄像头,多个摄像头支持切换展示,也可以展示rtsp地址。 使用NuGet如下: 代码如下 一、创建MainWindow.xaml代码如下。...
    99+
    2022-11-13
    WPF 调用本机摄像头 WPF 调用摄像头 WPF 摄像头
  • Python实现调用摄像头拍摄照片
    目录步骤代码实现效果步骤 用opencv打开摄像头并拍照保存照片到本地获取邮箱(如qq邮箱)的授权码,方法可自行百度将照片以附件的形式发送到指定邮箱删除本地照片 代码 import ...
    99+
    2024-04-02
  • 如何使用Python实现控制摄像头
    这篇文章主要介绍“如何使用Python实现控制摄像头”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用Python实现控制摄像头”文章能帮助大家解决问题。第一部分:环境搭建在使用 Python ...
    99+
    2023-07-05
  • html5如何实现调用摄像头
    小编给大家分享一下html5如何实现调用摄像头,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!html是什么html的全称为超文本标记语言,它是一种标记语言,包含了...
    99+
    2023-06-09
  • Python调用PC摄像头实现扫描二维码
    目录简介源代码源代码说明效果如下所示简介 使用PC摄像机扫描二维码可以有很多应用场景,例如: 支付宝、微信支付等移动支付方式需要使用二维码进行支付,PC摄像机可以扫描这些支付二维码,...
    99+
    2023-05-19
    Python调用摄像头扫描二维码 Python调用摄像头 Python 扫描二维码
  • 如何使用VUE+faceApi.js实现摄像头拍摄人脸识别
    目录需求:实现步骤:第一步:下载引入必要包下载依赖下载model将项目中的model放入VUE中的public文件加下第二步:先把HTML写上去 第三步 可以开始...
    99+
    2023-05-18
    face api.js 人脸识别 vue实现人脸识别 人脸识别 js
  • Python如何实现调用摄像头拍摄照片
    本文小编为大家详细介绍“Python如何实现调用摄像头拍摄照片”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python如何实现调用摄像头拍摄照片”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。步骤用opencv...
    99+
    2023-07-02
  • 使用python控制摄像头
    前言 当今,随着计算机技术的发展,摄像头已经成为了人们生活中不可或缺的一部分。而Python作为一种流行的编程语言,也可以轻松地控制和操作摄像头。无论你是想用Python写一个简单的摄像头应用程序,还是想在机器学习和计算机视觉项目中使用摄像...
    99+
    2023-09-23
    python opencv 计算机视觉 人工智能
  • Android调用前后摄像头同时工作实例代码
    硬件环境:小米4Android版本:6.0咱们先看效果图:我把代码贴出来:AndroidMainfest.xml文件(需要新增camera权限): <uses-permission android:name="android.per...
    99+
    2023-05-31
    android 调用 摄像头
  • yolov5调用usb摄像头及本地摄像头的方法实例
    目录yolov5调用usb摄像头YOLOv5调用本地摄像头总结yolov5 调用 usb 摄像头 文章是在yolov5 v5.0版本的detect.py所修改编写 其他v1.0-v4...
    99+
    2024-04-02
  • WPF使用AForge调用摄像头
    AForge引用 1.创建WPF项目, 在NuGet安装AForge相关SDK包: 2.项目引用 2.1.由于在WPF当中使用AForge,需要通过WindowsFormsHost...
    99+
    2024-04-02
  • Android实现极简打开摄像头
    很多时候忘记Android摄像头如何打开,查看google文档的话,发现太复杂(只是单纯的想打开摄像头而已,不想添加那么多设置,添加那么功能),很多博客也是对官方文档的小修小改,连方...
    99+
    2024-04-02
  • Android实现控制摄像头拍照
    现在的手机一般都会提供相机功能,有些相机的镜头甚至支持1300万以上像素,有些甚至支持独立对焦、光学变焦这些只有单反才有的功能,甚至有些手机直接宣传可以拍到星星。可以说手机已经变成了...
    99+
    2024-04-02
  • Android实现手机监控摄像头
    一直想在自己的Android手机上实现一个手机监控摄像头功能。今天逛论坛,看到一个例子,于是做了出来,留着以后完善。 功能点: 1、Android和PC通过socket通信。 2、A...
    99+
    2024-04-02
  • 使用Python实现控制摄像头的方法详解
    目录前言第一部分:环境搭建步骤一:安装 Python步骤二:安装 OpenCV步骤三:连接摄像头第二部分:摄像头基本操作1. 捕获视频帧2.保存视频总结前言 当今,随着计算机技术的发...
    99+
    2023-03-10
    Python实现控制摄像头 Python控制摄像头 Python 摄像头
  • python调用摄像头实现拍照功能
    目录 1.介绍 2.系统依赖 (1)OpenCV-Python库 (2)Tkinter库 (3)Pillow库 (4)Time库 3.系统代码 4.效果展示 5.注意事项 1.介绍         这是一个有趣的项目,通过Python程...
    99+
    2023-09-21
    python 开发语言
  • 怎么使用python调用摄像头
    这篇文章给大家分享的是有关怎么使用python调用摄像头的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、打开摄像头import cv2import numpy as np...
    99+
    2023-06-15
  • 如何使用PYTHON操作摄像头
    用过USB摄像头的都知道,你需要使用鼠标来操作它,比如截个图,录个像什么的,要点N次鼠标,对于我们那些不喜欢多次点击鼠标的人来说,这是一件很boring的事情,所以,本文将教你如何使用Python来操作摄像头。这里,我们需要三个Python...
    99+
    2023-06-01
  • 如何实现HTML 5在线摄像头应用
    如何实现HTML 5在线摄像头应用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。最近在搞一个考试系统,系统要求要有随机拍照的功...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作