private void CreateOffscreenViewer() { DestroyOffscreenViewer(); if (m_GngOffscreenViewer == null) { // create two decompression buffer object instances m_GngDecompBuffer1 = new GngDecompBuffer(); m_GngDecompBuffer1.SetBufferSize(width, heigth, GngDecompBufferFormat.dbfRGB32); m_GngDecompBuffer2 = new GngDecompBuffer(); m_GngDecompBuffer2.SetBufferSize(width, heigth, GngDecompBufferFormat.dbfRGB32); // create the offscreen viewer object instance m_GngOffscreenViewer = new GngOffscreenViewer(m_GngDecompBuffer1); m_NewPicDecompBuffer = m_GngDecompBuffer1; m_GngOffscreenViewer.GetTextParams(out GngViewTextParams Params); // display a timestamp in the viewer Params.InsertPicInfo = true; Params.FontSize = 20; m_GngOffscreenViewer.SetTextParams(Params); m_GngOffscreenViewer.SetOffscreenViewerSize(width, heigth, true); m_GngOffscreenViewer.Refresh(); // set callbacks of the offscreen viewer objects OffscreenViewerAcceptCallbackDelegate OffscreenViewerAcceptCallbackDelegateInstance = new OffscreenViewerAcceptCallbackDelegate(GngOffscreenViewer_AcceptCallbackDelegate); m_GngOffscreenViewer.SetOffscreenViewerAcceptCallBack(OffscreenViewerAcceptCallbackDelegateInstance); OffscreenViewerCallbackDelegate OffscreenViewerCallbackDelegateInstance = new OffscreenViewerCallbackDelegate(GngOffscreenViewer_CallbackDelegate); m_GngOffscreenViewer.SetOffscreenViewerCallBack(OffscreenViewerCallbackDelegateInstance); } }
private void GngOffscreenViewer_CallbackDelegate(OffscreenViewerCallbackEventArgs e) { // check whether image in buffer is valid if (e.PicData.GngMediaDesc != null) { // new decompressed picture available lock (m_CSBuffer) { m_NewPicDecompressed = true; if (e.OffscreenBufferHandle.IsNativeBufferIdentical(m_GngDecompBuffer2)) { Monitor.Exit(m_CSBuffer2); m_NewPicDecompBuffer = m_GngDecompBuffer2; } else { Monitor.Exit(m_CSBuffer1); m_NewPicDecompBuffer = m_GngDecompBuffer1; } } CreateFrame(); e.ImageWasHandled = true; } }
private void DestroyOffscreenViewer() { if (m_GngOffscreenViewer != null) { m_GngOffscreenViewer.Disconnect(true); m_GngOffscreenViewer.CloseCustomDrawCallBack(); m_GngOffscreenViewer.CloseOffscreenViewerAcceptCallBack(); m_GngOffscreenViewer.CloseOffscreenViewerCallBack(); m_GngOffscreenViewer.Dispose(); m_GngOffscreenViewer = null; } m_NewPicDecompBuffer = null; if (m_GngDecompBuffer1 != null) { m_GngDecompBuffer1.Dispose(); m_GngDecompBuffer1 = null; } if (m_GngDecompBuffer2 != null) { m_GngDecompBuffer2.Dispose(); m_GngDecompBuffer2 = null; } }