0

我需要一些关于实现特定结果的最佳方法的建议......

我的情景...

我有一个 Form1 类,这是我的主窗体,上面有一个图片框。

我有一个名为 camera 的第二个类,它使用事件处理程序从我的网络摄像头中抓取一个帧(位图)。

然后我想以最好的方式将此帧传递给主窗体中的图片框。

目前在主要形式我有代码:

public static void setPB(Bitmap image) 
{

var form = Form.ActiveForm as Form1;
form.pbWebCamDisplay = image;

}

然后在我使用的相机类中

Form1.setPB(currentFrame);

这很好用,但是我不确定这是否是最佳编程实践?是否可以使用自定义事件?

提前感谢您的帮助

汤姆

4

5 回答 5

0

如果我在你的位置,我会使用事件。

于 2010-09-06T09:55:42.787 回答
0

是的,我会说非常好。您有一个负责处理相机输入的相机类和一个用于表单私有成员的公共设置器。我不会改变一点。

这样,您就可以将功能的不同职责分成不同的类。不要在 Form 类中处理相机事件,而是按照您的方式处理。

于 2010-09-06T09:57:03.140 回答
0

我将在 Camera 类上创建一个方法,该方法拍摄照片并返回一个 Bitmap 对象。

因此,在按钮的 OnLoad 或 OnClick 中,调用该方法并将返回值设置为 PictureBox...

var picture = new Camera().TakePicture();
myPictureBox.Image = picture;

类似的东西:)

编辑:如果 Camera 类是事件驱动组件(Camera.NewFrame 事件),请尝试:

(在构造函数中):

var camera = new Camera();
camera.OnNewFrame += new OnNewFrameEventHandler(MyEventHandler);

(事件处理程序)

public void MyEnventHandler(EventArgs comingFromComponent)
{
   var image = comingFromComponent.Frame; // (hopefully this is the case :))
   myPictureBox.Image = image;
}
于 2010-09-06T09:57:14.927 回答
0

当然,事件是正确的选择。您可以使用它们来实现观察者设计模式。您当前的实现不是最佳实践 - 它强制 Camera 和 Form 类之间的紧密耦合。

于 2010-09-06T09:59:26.920 回答
0

是什么驱动了使 Camera 类抓取图片的事件?这个很重要。

如果事件由表单本身触发,您甚至不需要表单中的 PictureBox 设置器。

顺便说一句,我和 Jorge Córdoba 在一起,你只需要一个二传手和一个抓取活动。奥卡姆剃须刀。

于 2010-09-06T09:59:38.090 回答