可以拍照的一个WPF程序

4 篇文章 0 订阅
 <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="131*"/>
            <ColumnDefinition Width="132*"/>
            <ColumnDefinition Width="117*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="25"/>
            <RowDefinition Height="28"/>
            <RowDefinition Height="424*"/>
            <RowDefinition Height="100*"/>
        </Grid.RowDefinitions>
        <Menu Height=" 24" Grid.Row="0" VerticalAlignment="Top"  Grid.ColumnSpan="3" HorizontalAlignment="Stretch" >
            <MenuItem Header=" 文件(_F)" Height="24" Width="63">
                <MenuItem Header="新建(_N)">
                    <MenuItem Header="项目(_P)"/>
                    <MenuItem Header="窗口(_C)"/>
                </MenuItem>
                <MenuItem Header="打开(_O)">
                    <MenuItem Header="现有项目(_P)"/>
                    <MenuItem Header="现有窗口(_C)"/>
                </MenuItem>
                <MenuItem Header="插入照片(_I)"/>
            </MenuItem>
            <MenuItem Header="编辑(_E)">
                <MenuItem Header="撤销(_U)" Command="ApplicationCommands.Undo"/>
                <MenuItem Header="重做(_R)" Command="ApplicationCommands.Redo"/>
                <Separator />
                <MenuItem Header="截切(_T)" Command="ApplicationCommands.Cut"/>
                <MenuItem Header="复制(_C)" Command="ApplicationCommands.Copy"/>
                <MenuItem Header="粘贴(_P)" Command="ApplicationCommands.Paste"/>
            </MenuItem>
            <MenuItem Header="分析(_N">
                <MenuItem Header="数值分析(_C)"/>
            </MenuItem>
            <MenuItem Header="帮助(_H)" >
                <MenuItem Header="发送反馈(_F)"/>
                <MenuItem Header="版本信息(_P)"/>
            </MenuItem>
        </Menu>
        <ToolBarTray VerticalAlignment="Top" HorizontalAlignment="Stretch"  Grid.Row="1" Grid.ColumnSpan="3">
            <ToolBar Band="1" VerticalAlignment="Top" Height="28">
                <Button>
                    <Image Source="/sources/1158503.png" Height="16" VerticalAlignment="Top"  />
                </Button>
                <Button>
                    <Image Source="/sources/1158508.png" Height="16" VerticalAlignment="Top"  />
                </Button>
                <Separator />
                <Button>
                    <Image Source="/sources/floppy13.png" Height="20" VerticalAlignment="Top"/>
                </Button>
                <Button>
                    <Image Source="/sources/floppy15.png" Height="20" VerticalAlignment="Top"/>
                </Button>
                <Button >
                    <StackPanel Orientation="Horizontal" >
                        <Image Source="/sources/1186321.png" Height="18" VerticalAlignment="Top" />
                        <TextBlock Text="计算"/>
                    </StackPanel>
                </Button>
                <Separator />
                <Button Height="28" x:Name="btnCapture" Content="拍照" Click="btnCapture_Click"/>
                <Button Height="28" x:Name="btnanew" Content="重拍" Click="btnanew_Click"/>
            </ToolBar>
        </ToolBarTray>
        <Viewbox  Grid.Row=" 2" Grid.Column=" 0" Grid.ColumnSpan="2">
            <WPFMediaKit:VideoCaptureElement  Name="vce"/>
            <!--预览画面-->
        </Viewbox>
        <TabControl Grid.Row=" 3" Grid.Column=" 0" Grid.ColumnSpan="2">
            <TabItem Header="输出">
                <StatusBar >
                    <TextBlock Text="计算结果为" VerticalAlignment="Top" />
                </StatusBar>
            </TabItem>
        </TabControl>
        <TabControl Grid.Row=" 2" Grid.Column="2">
            <TabItem Header="设置">
                <StackPanel >
                    <ComboBox Name="cb" SelectionChanged="cb_SelectionChanged" HorizontalAlignment="Stretch"  Height=" 20" VerticalAlignment="Top"  />
                    <!--选摄像头-->
                    <Viewbox  >
                        <StackPanel Orientation="Horizontal" >
                            <TextBlock Text="曝光度:"/>
                            <Slider Maximum=" 100" Minimum=" 0" HorizontalAlignment="Stretch" Width=" 159" Height="20" Value=" 50" SmallChange=" 1"
                                     TickFrequency=" 1" IsSnapToTickEnabled="True"  IsSelectionRangeEnabled="True" TickPlacement="BottomRight" 
                                   Delay="10"/>
                        </StackPanel>
                    </Viewbox>
                </StackPanel>
            </TabItem>
        </TabControl>
        <TabControl  Grid.Row=" 3" Grid.Column="2">
            <TabItem Header=" 属性">
            </TabItem>
        </TabControl>

    </Grid>



 public MainWindow()
        {
            InitializeComponent();
        }


        private void cb_SelectionChanged(object sender, SelectionChangedEventArgs e)   //选择摄像头
        {
            vce.VideoCaptureSource = (string)cb.SelectedItem;
        }


        private void btnCapture_Click(object sender, RoutedEventArgs e)             //拍照
        {
            //captureElement. 怎么抓取高清的原始图像           
            RenderTargetBitmap bmp = new RenderTargetBitmap(               //RenderTargetBitmap将Visual对象转化到位图中
                (int)vce.ActualWidth,
                (int)vce.ActualHeight,
               95, 95, PixelFormats.Default);
            //vce.Stretch = Stretch.Fill;
            //vce.Measure(vce.RenderSize);
            //vce.Arrange(new Rect(vce.RenderSize));
            bmp.Render(vce);           //呈现visual对象


            BitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bmp));


            string now = DateTime.Now.Year + "" + DateTime.Now.Month + "" + DateTime.Now.Day + "" +
                DateTime.Now.Hour + "" + DateTime.Now.Minute + "" + DateTime.Now.Second;
            string filename = "G:/trains C#/desktop\\" + now + "pic.jpg";
            FileStream fsstream = new FileStream(filename, FileMode.Create);
            encoder.Save(fsstream);
            fsstream.Close();






            /* using (MemoryStream ms = new MemoryStream())
             {
                 encoder.Save(ms);
                 byte[] captureData = ms.ToArray();
                 File.WriteAllBytes("G:/trains C#/desktop/1.jpg", captureData);
             }*///拍摄一张招牌


            vce.Pause();                     //在当前位置暂停媒体。
        }


        private void Window_Loaded(object sender, RoutedEventArgs e)   //获取摄像头
        {
            cb.ItemsSource = MultimediaUtil.VideoInputNames;
            if (MultimediaUtil.VideoInputNames.Length > 0)
            {
                cb.SelectedIndex = 0;//默认选择第0个摄像头
            }
            else
            {
                MessageBox.Show("没有检测到任何摄像头");
            }
        }
        /// <summary>
        /// 重拍
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnanew_Click(object sender, RoutedEventArgs e)   //重拍
        {
            vce.Play();
        }
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值