Сохранение захваченного изображения без использования буфера обмена с помощью WM_CAP_SAVEDIB с использованием С#?

Я написал код, который захватывает изображение и сохраняет его в определенной папке. Теперь мне нужно получить доступ к этому методу через другой поток, но я не мог, потому что я использовал данные из буфера обмена. Теперь мне нужно переписать код с 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

person Esay    schedule 11.05.2014    source источник
comment
не могли бы вы помочь мне использовать WM_CAP_SAVEDIB в C#?   -  person Esay    schedule 12.05.2014


Ответы (1)


Вот решение: я должен использовать Marshal.StringToHGlobalAnsi() для выделения управляемой строки и копирования в нее всей неуправляемой строки ANSI. новый код такой:

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