保存捕获的图像不使用剪贴板与WM_CAP_SAVEDIB使用c#

本文关键字:WM CAP SAVEDIB 使用 剪贴板 图像 保存 | 更新日期: 2023-09-27 18:02:57

我编写了一个代码,捕获图像并将其保存在特定的文件夹中。现在我需要通过另一个线程访问这个方法,但我不能,因为我已经使用从剪贴板获取数据。现在我需要用WM_CAP_SAVEDIB重写代码。我看过这个链接:如何不使用剪贴板复制图像?以前,但我真的很困惑,因为我是编程新手。你能帮我重写一下代码,不用剪贴板吗?

这里是我需要从其他线程访问的方法:

#region Capture
 public void CaptureFunc()
        {
            PhotoNo = PhotoNo + 1;
            // get the next frame;
            SendMessage(mCapHwnd, WM_CAP_GET_FRAME, 0, 0);
            // copy the frame to the clipboard
            SendMessage(mCapHwnd, WM_CAP_COPY, 0, 0);
            tempObj = Clipboard.GetDataObject();
            tempImg =(System.Drawing.Bitmap)tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap);
            Graphics graphics = Graphics.FromImage(tempImg);                   
            // Create Directory & Save             
            CreateDir();                   
            tempImg.Save(Path.Combine(Dirname,PhotoNo.ToString()) + ".jpeg", jgpEncoder, myEncoderParameters);  }
#endregion

保存捕获的图像不使用剪贴板与WM_CAP_SAVEDIB使用c#

解决方案如下:我应该使用Marshal.StringToHGlobalAnsi()来分配托管字符串并将所有非托管ANSI字符串复制到其中。新代码如下:

IntPtr hBmp = Marshal.StringToHGlobalAnsi(FinalPath);
SendMessage(mCapHwnd,WM_CAP_SAVEDIB,0,hBmp.ToInt32());