衣冠人笑 2023-03-06 09:44 采纳率: 16.7%
浏览 32
已结题

WPF程序WPFMEDIAKIT调用摄像照照

我的WPF程序,使用WPFMEDIAKIT拍照。
我的VideoCaptureElement在界面上的控件大小是200200,但是我摄像头实际上是4K(31204208)的,现在我使用下面的代码保存的照片是200*200的,但是我想要高分辨率的照片,而不想让VideoCaptureElement在界面上占据太大的空间,请问怎么做?
另一个问题是,有些摄像头可能有多种分辨率工作模式,使用WPFMEDIAKIT该如何指定呢。
如果我使用Aforge,上面两个问题都有解决方案。现在我想知道在WPFMEDIAKIT有没有对应的方法


```c#
//RenderTargetBitmap bmp = new RenderTargetBitmap((int)vce.ActualWidth, (int)vce.ActualHeight,96, 96, PixelFormats.Default);
            RenderTargetBitmap bmp = new RenderTargetBitmap(4208,3120, 96, 96, PixelFormats.Default);
           vce.Measure(vce.RenderSize);
            bmp.Render(vce);
            BitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bmp));
            using (MemoryStream stream = new MemoryStream())
            {
                encoder.Save(stream);
                byte[] pics = stream.ToArray(); // 将流以文件形式存储于计算机中。
                string fileName = DateTime.Now.ToString("yyyyMMdd-HHmmss");
                string fullPath = System.IO.Path.Combine(appStartupPath + "\\Images", fileName + "_cap.jpg");
                //保存图片
                File.WriteAllBytes(fullPath, pics);
            }   // 预览效果暂停。
            //vce.Pause();

```

  • 写回答

4条回答 默认 最新

  • CodeBytes 2023-03-06 09:51
    关注

    该回答引用ChatGPT

    要获得高分辨率的照片,您可以在创建RenderTargetBitmap对象时将其大小设置为所需的分辨率。而且,如果您不想让VideoCaptureElement在界面上占据太大的空间,您可以将其放置在Grid控件中,并将行和列的大小设置为自动,以根据其内容自动调整大小。

    WPFMediaKit提供了一种方便的方法来指定所需的摄像头分辨率。您可以使用VideoCaptureElement控件的PreferredPixelWidth和PreferredPixelHeight属性来设置所需的像素大小,如下所示:

    
    vce.PreferredPixelWidth = 1920; // set preferred width to 1920 pixels
    vce.PreferredPixelHeight = 1080; // set preferred height to 1080 pixels
    
    

    这将告诉WPFMediaKit使用指定的分辨率捕获视频。

    完整的代码示例如下所示:

    
    RenderTargetBitmap bmp = new RenderTargetBitmap(4208, 3120, 96, 96, PixelFormats.Default);
    vce.Measure(new Size(vce.PreferredPixelWidth, vce.PreferredPixelHeight));
    vce.Arrange(new Rect(0, 0, vce.PreferredPixelWidth, vce.PreferredPixelHeight));
    bmp.Render(vce);
    BitmapEncoder encoder = new JpegBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(bmp));
    using (MemoryStream stream = new MemoryStream())
    {
        encoder.Save(stream);
        byte[] pics = stream.ToArray(); // 将流以文件形式存储于计算机中。
        string fileName = DateTime.Now.ToString("yyyyMMdd-HHmmss");
        string fullPath = System.IO.Path.Combine(appStartupPath + "\\Images", fileName + "_cap.jpg");
        //保存图片
        File.WriteAllBytes(fullPath, pics);
    }   // 预览效果暂停。
    //vce.Pause();
    
    

    请注意,为了使VideoCaptureElement使用所需的分辨率,您还需要在打开摄像头之前设置PreferredPixelWidth和PreferredPixelHeight属性。例如:

    
    vce.PreferredPixelWidth = 1920; // set preferred width to 1920 pixels
    vce.PreferredPixelHeight = 1080; // set preferred height to 1080 pixels
    vce.StartCapture();
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月14日
  • 已采纳回答 3月6日
  • 创建了问题 3月6日

悬赏问题

  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码