From f1705145319bc01cd184e883ef8f7ff72d7bf085 Mon Sep 17 00:00:00 2001 From: JEFF Date: Sat, 18 Jan 2025 14:49:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=A8=8B=E5=BC=8F0118?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Camera_connect/BaslerCamera.cs | 41 +++++++++++++++++++++++++++++++++ Camera_connect/Main.Designer.cs | 2 +- Camera_connect/Main.cs | 27 +++++++++++++++++++--- 3 files changed, 66 insertions(+), 4 deletions(-) diff --git a/Camera_connect/BaslerCamera.cs b/Camera_connect/BaslerCamera.cs index 2adae46..ecbc2f6 100644 --- a/Camera_connect/BaslerCamera.cs +++ b/Camera_connect/BaslerCamera.cs @@ -79,8 +79,49 @@ namespace Camera_connect var camera = allCameras[0]; camera.Parameters[PLCamera.AcquisitionMode].SetValue(PLCamera.AcquisitionMode.Continuous); camera.StreamGrabber.Start(GrabStrategy.OneByOne, GrabLoop.ProvidedByStreamGrabber); + + camera.StreamGrabber.ImageGrabbed += (sender, e) => + { + var grabResult = e.GrabResult; + if (grabResult.IsValid) + { + Bitmap bmp = GrabResultToBitmap(grabResult); + UpdatePictureBox(bmp); + } + }; } + // 將 IGrabResult 轉換為 Bitmap + private Bitmap GrabResultToBitmap(IGrabResult grabResult) + { + Bitmap bmp = new Bitmap(grabResult.Width, grabResult.Height, PixelFormat.Format32bppArgb); + BitmapData bitmapData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat); + + pxConvert.OutputPixelFormat = PixelType.BGRA8packed; + pxConvert.Convert(bitmapData.Scan0, bitmapData.Stride * bmp.Height, grabResult); + + bmp.UnlockBits(bitmapData); + return bmp; + } + + // 更新 PictureBox 的顯示 + private void UpdatePictureBox(Bitmap bmp) + { + form.Invoke((MethodInvoker)delegate + { + Bitmap resizedImage = new Bitmap(form.pictureBox1.Width, form.pictureBox1.Height); + using (Graphics g = Graphics.FromImage(resizedImage)) + { + g.DrawImage(bmp, 0, 0, form.pictureBox1.Width, form.pictureBox1.Height); + } + + Bitmap? oldImage = form.pictureBox1.Image as Bitmap; + form.pictureBox1.Image = resizedImage; + oldImage?.Dispose(); + }); + } + + public void Stop() { diff --git a/Camera_connect/Main.Designer.cs b/Camera_connect/Main.Designer.cs index 373efa0..c39c308 100644 --- a/Camera_connect/Main.Designer.cs +++ b/Camera_connect/Main.Designer.cs @@ -172,7 +172,7 @@ private Button Bt_OneShot; private Button Bt_KeepShot; private Button Bt_Stop; - private PictureBox pictureBox1; + public PictureBox pictureBox1; private Label Label_status; private ComboBox comboBox1; private TextBox camera_serialnumber; diff --git a/Camera_connect/Main.cs b/Camera_connect/Main.cs index aeebd23..39f46a1 100644 --- a/Camera_connect/Main.cs +++ b/Camera_connect/Main.cs @@ -139,6 +139,7 @@ namespace Camera_connect if (image != null) { pictureBox1.Image = image; + Label_status.Text = "IDSi^"; } } } @@ -148,6 +149,7 @@ namespace Camera_connect if (Basler != null) { Basler.OneShot(); // 榸 + Label_status.Text = "Basleri^"; } else { @@ -169,6 +171,7 @@ namespace Camera_connect { // IDS ۾s޿ StartKeepShot(() => IDS_camera.GetPicture()); + Label_status.Text = "IDSs"; } else if (selectedCamera == "Basler") { @@ -177,6 +180,7 @@ namespace Camera_connect { Basler.KeepShot(); isKeepShotting = true; + Label_status.Text = "Baslers"; } else { @@ -255,16 +259,33 @@ namespace Camera_connect { pictureBox1.Invoke((MethodInvoker)delegate { + // YvHA PictureBox + Bitmap resizedImage = new Bitmap(pictureBox1.Width, pictureBox1.Height); + using (Graphics g = Graphics.FromImage(resizedImage)) + { + g.DrawImage(bmp, 0, 0, pictureBox1.Width, pictureBox1.Height); + } + + // s PictureBox Bitmap? old = pictureBox1.Image as Bitmap; - pictureBox1.Image = bmp; + pictureBox1.Image = resizedImage; old?.Dispose(); }); } private void Bt_disconnect_Click(object sender, EventArgs e) { - Basler.Close(); - Label_status.Text = "۾_su"; + string? selectedCamera = comboBox1.SelectedItem?.ToString(); + if (selectedCamera == "IDS") + { + Label_status.Text = "IDS۾_su"; + } + else if(selectedCamera == "Basler") + { + Basler.Close(); + Label_status.Text = "Basler۾_su"; + } + } } }