首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Camera.PictureCaptured之后重新启动Camera.StartStreamingBitmaps

在Camera.PictureCaptured之后重新启动Camera.StartStreamingBitmaps
EN

Stack Overflow用户
提问于 2013-01-23 16:21:30
回答 2查看 671关注 0票数 2

我有一个.Net小工具相机应用程序,它可以将位图从相机流到屏幕上。按一下按钮,它就会停止从相机中流式传输位图,拍摄一张照片,将其写入SD卡,然后重新开始流式传输。下面是代码的简化版本(不需要保存到SD卡中):

代码语言:javascript
复制
using Microsoft.SPOT;
using GT = Gadgeteer;
using Gadgeteer.Modules.GHIElectronics;
namespace SimpleStopStreamingApp
{
    public partial class Program
    {
        void ProgramStarted()
        {
            camera.CameraConnected += new Camera.CameraConnectedEventHandler(camera_CameraConnected);
            camera.BitmapStreamed += new Camera.BitmapStreamedEventHandler(camera_BitmapStreamed);
            camera.PictureCaptured += new Camera.PictureCapturedEventHandler(camera_PictureCaptured);
            button.ButtonPressed += new Button.ButtonEventHandler(button_ButtonPressed);
        }
        void camera_CameraConnected(Camera sender)
        {
            camera.StartStreamingBitmaps(new Bitmap(camera.CurrentPictureResolution.Width, camera.CurrentPictureResolution.Height));
        }
        void camera_BitmapStreamed(Camera sender, Bitmap bitmap)
        {
            display_T35.SimpleGraphics.DisplayImage(bitmap, 0, 0);
        }
        void button_ButtonPressed(Button sender, Button.ButtonState state)
        {
            camera.StopStreamingBitmaps();
            camera.TakePicture();
        }
        void camera_PictureCaptured(Camera sender, GT.Picture picture)
        {
            camera.StartStreamingBitmaps(new Bitmap(camera.CurrentPictureResolution.Width, camera.CurrentPictureResolution.Height));
        }
    }
}

但是,当我尝试重新启动流(在PictureCaptured事件处理程序中)时,我得到了异常。

代码语言:javascript
复制
#### Exception System.Exception - 0xffffffff (1) ####
#### Message: 
#### GHI.Premium.USBHost.USBH_Webcam::StartStreaming_Internal [IP: 0000] ####
#### GHI.Premium.USBHost.USBH_Webcam::StartStreaming [IP: 0005] ####
#### Gadgeteer.Modules.GHIElectronics.Camera::StartStreamingBitmaps [IP: 007e] ####
#### Gadgeteer.Modules.GHIElectronics.Camera::OnPictureCapturedEvent [IP: 0037] ####
#### System.Reflection.MethodBase::Invoke [IP: 0000] ####
#### Gadgeteer.Program::DoOperation [IP: 001a] ####
#### Microsoft.SPOT.Dispatcher::PushFrameImpl [IP: 0054] ####
#### Microsoft.SPOT.Dispatcher::PushFrame [IP: 001a] ####
#### Microsoft.SPOT.Dispatcher::Run [IP: 0006] ####
#### Gadgeteer.Program::Run [IP: 0020] ####

A first chance exception of type 'System.Exception' occurred in GHI.Premium.USBHost.dll Error invoking method "Gadgeteer.Modules.GHIElectronics.Camera" (check arguments to Program.BeginInvoke are correct)

(注:如果我将位图存储为实例变量,并将其传递给StartStreamingBitmaps的两个调用,而不是每次都创建新的位图,则会得到相同的异常。)

到底怎么回事?如何停止摄像头流以捕获和图像,然后重新启动流媒体?

EN

回答 2

Stack Overflow用户

发布于 2013-01-24 22:20:18

根据check arguments to Program.BeginInvoke are correct的说明,这听起来几乎像是希望在线程上运行StartStreamingBitmaps

看看这个:

代码语言:javascript
复制
void camera_PictureCaptured(Camera sender, GT.Picture picture)
{
  camera.StartStreamingBitmaps(new Bitmap(camera.CurrentPictureResolution.Width, camera.CurrentPictureResolution.Height));
}

我对这个Gadgeteer模块一无所知,但是如果您正确地连接了它,我会认为您的新GT.Picture已经包含在传入的picture参数中。

它看起来就像是在相机完成拍摄后,您正在尝试从相机流式传输图像。

你能编辑你的帖子并提供更多细节吗?你能确认这个camera_PictureCaptured事件就是抛出异常的地方吗?只需将您的事件处理程序修改为:

代码语言:javascript
复制
void camera_PictureCaptured(Camera sender, GT.Picture picture)
{
  try
  {
    camera.StartStreamingBitmaps(new Bitmap(camera.CurrentPictureResolution.Width, camera.CurrentPictureResolution.Height));
  } catch (Exception err)
  {
    throw new Exception("PictureCaptured: " + err.Message);
  }
}

如果此事件处理程序不是引发异常的处理程序,请尝试在其他事件处理程序中放置类似的try...catch例程,直到发现问题的真正原因。

票数 1
EN

Stack Overflow用户

发布于 2013-06-13 05:11:03

尝试在停止流式传输位图时删除回调:

代码语言:javascript
复制
void button_ButtonPressed(Button sender, Button.ButtonState state)
{
    camera.BitmapStreamed -= new Camera.BitmapStreamedEventHandler(camera_BitmapStreamed);
    camera.StopStreamingBitmaps();
    camera.TakePicture();
}

void camera_PictureCaptured(Camera sender, GT.Picture picture)
{
    camera.BitmapStreamed += new Camera.BitmapStreamedEventHandler(camera_BitmapStreamed);
    camera.StartStreamingBitmaps(new Bitmap(camera.CurrentPictureResolution.Width, camera.CurrentPictureResolution.Height));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14475177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档