保存捕获的图像不使用剪贴板与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
解决方案如下:我应该使用Marshal.StringToHGlobalAnsi()来分配托管字符串并将所有非托管ANSI字符串复制到其中。新代码如下:
IntPtr hBmp = Marshal.StringToHGlobalAnsi(FinalPath);
SendMessage(mCapHwnd,WM_CAP_SAVEDIB,0,hBmp.ToInt32());