using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using WeifenLuo.WinFormsUI.Docking; namespace Check.Main.UI { public partial class FormImageDisplay : DockContent { /// /// 相机名称 /// public string CameraName { get; set; } /// /// 当此显示窗口发生特定事件时(如ROI裁剪),触发此事件以通知外部(如日志系统) /// public event Action OnDisplayEvent; // 使用我们全新的自定义控件 private ZoomPictureBox zoomPictureBox; public FormImageDisplay() { InitializeComponent(); // 实例化新的控件 zoomPictureBox = new ZoomPictureBox { Dock = DockStyle.Fill, // 其他属性可以在这里设置,例如 // RectangleColor = Color.LawnGreen, // BackgroundFillColor = Color.FromArgb(45, 45, 48) }; this.Controls.Add(zoomPictureBox); // 订阅自定义控件的ROI裁剪完成事件 zoomPictureBox.CroppingEnabled = false; //zoomPictureBox.Cropped += ZoomPictureBox_Cropped; } /// /// 更新显示的图像(线程安全)。 /// 此方法现在将图像设置到 ZoomPictureBox1 控件中。 /// /// 从相机事件传来的原始Bitmap public void UpdateImage(Bitmap image) { if (zoomPictureBox != null && !zoomPictureBox.IsDisposed) { zoomPictureBox.SetImageThreadSafe(image); } else { // 如果PictureBox已经被释放,那么我们也应该释放这个多余的图像 image?.Dispose(); } } // 重写 Close 方法,确保在窗口关闭时,内部的控件和资源也能被妥善处理 public new void Close() { // 取消事件订阅,防止内存泄漏 if (zoomPictureBox != null) { //zoomPictureBox.Cropped -= ZoomPictureBox_Cropped; } base.Close(); } } }