1
我想將我從示例採集器中獲得的每個幀轉換爲位圖,但它似乎不起作用。ISampleGrabberCB ::示例不工作
我用SampleCB
如下:
int ISampleGrabberCB.SampleCB(double SampleTime, IMediaSample sample)
{
try
{
int lengthOfFrame = sample.GetActualDataLength();
IntPtr buffer;
if (sample.GetPointer(out buffer) == 0 && lengthOfFrame > 0)
{
Bitmap bitmapOfFrame = new Bitmap(width, height, capturePitch, PixelFormat.Format24bppRgb, buffer);
Graphics g = Graphics.FromImage(bitmapOfFrame);
Pen framePen = new Pen(Color.Black);
g.DrawLine(framePen, 30, 30, 50, 50);
g.Flush();
}
CopyMemory(imageBuffer, buffer, lengthOfFrame);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
Marshal.ReleaseComObject(sample);
return 0;
}
我畫上有一個小的圖形作爲測試人員,它似乎並沒有工作。從我相信這應該是添加一個小行到每個幀,因此更新我的預覽線。
如果需要的話我可以給額外的代碼(如我如何設置我的圖形和連接我的ISampleGrabber)
編輯與我想迪週一表示:
int ISampleGrabberCB.SampleCB(double SampleTime, IMediaSample sample)
{
try
{
int lengthOfFrame = sample.GetActualDataLength();
IntPtr buffer;
BitmapData bitmapData = new BitmapData();
if (sample.GetPointer(out buffer) == 0 && lengthOfFrame > 0)
{
Bitmap bitmapOfFrame = new Bitmap(width, height, capturePitch, PixelFormat.Format24bppRgb, buffer);
Graphics g = Graphics.FromImage(bitmapOfFrame);
Pen framePen = new Pen(Color.Black);
g.DrawLine(framePen, 30, 30, 50, 50);
g.Flush();
Rectangle rect = new Rectangle(0, 0, bitmapOfFrame.Width, bitmapOfFrame.Height);
bitmapData = bitmapOfFrame.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
IntPtr bitmapPointer = bitmapData.Scan0;
CopyMemory(bitmapPointer, buffer, lengthOfFrame);
BitmapOfFrame.UnlockData(bitmapData);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
Marshal.ReleaseComObject(sample);
return 0;
}
我已經添加了我對原始帖子中的含義的解釋。你是這個意思嗎? – legohead
那麼,你已經有了bitmapData,但是你並沒有使用它。至少在這個片段。你想要更新的圖片保存在一個bmp文件中,或只是傳遞給一個渲染器? –
基本上我想處理每一個新的框架。我想使用位圖來完成這個任務,因爲外部庫需要處理每個圖像,我還想爲每個幀繪製一個十字準線,所以我認爲將圖形添加到位圖會比其他方法更容易。 – legohead