• WPF使用AForge实现Webcam预览(二)


    本文主要介绍如何让摄像头预览界面的宽高比始终在16:9。

    首先我们需要修改一下上一篇随笔实现的UI界面,让Grid变成一个3*3的九宫格,预览界面位于正中间。Xaml示例代码如下:

    <Window x:Class="WebcamPreview.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:controls="clr-namespace:AForge.Controls;assembly=AForge.Controls"
            mc:Ignorable="d"
            Title="Webcam" Height="360" Width="320" MinHeight="360" MinWidth="320" ResizeMode="CanResize" SizeChanged="Window_SizeChanged">
        <Grid  Background="Black">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"></ColumnDefinition>
                <ColumnDefinition Width="320" x:Name="col"></ColumnDefinition>
                <ColumnDefinition Width="*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="360" x:Name="row"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid Grid.Row="1" Grid.Column="1">
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <WindowsFormsHost Background="Transparent">
                    <controls:VideoSourcePlayer x:Name="VideoSourcePlayer1"/>
                </WindowsFormsHost>
                <WindowsFormsHost Background="Transparent" Grid.Row="1" >
                    <controls:VideoSourcePlayer x:Name="VideoSourcePlayer2" />
                </WindowsFormsHost>
            </Grid>
        </Grid>
    </Window>

    指定Window的ResizeMode为CanResize,这样就我们可以调整窗口的大小了。

    接下来就要实现windowSizeChanged事件。

    private double radio = (double)16 / 9;
    
    private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
            {
                int width = Convert.ToInt32(ActualWidth);
                int height = Convert.ToInt32(ActualHeight / 2);
                if (width > height * radio)
                {
                    width = Convert.ToInt32(height * radio);
                }
                else
                {
                    height = Convert.ToInt32(width / radio);
                }
    
                row.Height = new GridLength(height * 2);
                col.Width = new GridLength(width);
            }

    这样就可以在我们改变窗口大小的时候,使我们视频预览的宽高比始终保持在16:9了。

    最终效果如下:

  • 相关阅读:
    Mac上的常用软件
    Mac上在iterm2中使用ls时,出现Operation not permitted
    Typora常用操作
    Mac上的qemusystemaarch64占用太多内存
    软件质量管理总结
    postgres使用记录
    Linux 包含中文字符的文件名无法使用shell 选中或复制
    常见硬件知识
    iterm2 常用操作
    C# 通过 HTTPModule 防范 DOS
  • 原文地址:https://www.cnblogs.com/supperwu/p/10839755.html
Copyright © 2020-2023  润新知