internal SerFrameInfo(SerNativeFrameInfo nativeInfo) { try { TimeStampUtc = new DateTime((long)(uint)nativeInfo.TimeStampUtcLo + ((long)(uint)nativeInfo.TimeStampUtcHi << 32)); } catch (ArgumentOutOfRangeException aex) { Trace.WriteLine(aex); TimeStampUtc = DateTime.MinValue; } }
// DLL_PUBLIC HRESULT SERGetFrameInfo(long frameNo, SerLib::SerFrameInfo* frameInfo); public static extern int SERGetFrameInfo(int frameNo, [In, Out] ref SerNativeFrameInfo frameInfo);
// DLL_PUBLIC HRESULT SERGetIntegratedFrame(long startFrameNo, long framesToIntegrate, bool isSlidingIntegration, bool isMedianAveraging, unsigned long* pixels, unsigned long* originalPixels, BYTE* bitmapBytes, BYTE* bitmapDisplayBytes, unsigned int cameraBitPix, SerLib::SerFrameInfo* frameInfo); public static extern int SERGetIntegratedFrame(int startFrameNo, int framesToIntegrate, bool isSlidingIntegration, bool isMedianAveraging, [Out] uint[] pixels, [In, Out] uint[] originalPixels, [Out] byte[] bitmapBytes, [Out] byte[] bitmapDisplayBytes, ushort cameraBitPix, [In, Out] ref SerNativeFrameInfo frameInfo);
// DLL_PUBLIC HRESULT SERGetFrame(long frameNo, unsigned long* pixels, unsigned long* originalPixels, BYTE* bitmapPixels, BYTE* bitmapBytes, unsigned int cameraBitPix, SerLib::SerFrameInfo* frameInfo); public static extern int SERGetFrame(int frameNo, [In, Out] uint[] pixels, [In, Out] uint[] originalPixels, [In, Out] byte[] bitmapBytes, [In, Out] byte[] bitmapDisplayBytes, ushort cameraBitPix, [In, Out] ref SerNativeFrameInfo frameInfo);
public SerFrameInfo SerFrameInfoOnly(int index) { if (UseTimeStamp == SerUseTimeStamp.FireCaptureLog) { DateTime dt; if (m_FireCaptureTimeStamps.TryGetValue(1 + index, out dt)) return new SerFrameInfo(dt); return new SerFrameInfo(DateTime.MinValue); } else { var frameInfo = new SerNativeFrameInfo(); TangraCore.SERGetFrameInfo(index, ref frameInfo); return new SerFrameInfo(frameInfo); } }
public Pixelmap GetPixelmap(int index) { if (index < FirstFrame || index > LastFrame) throw new ApplicationException("Invalid frame position: " + index); uint[] pixels = new uint[Width * Height]; uint[] unprocessedPixels = new uint[Width * Height]; byte[] displayBitmapBytes = new byte[Width * Height]; byte[] rawBitmapBytes = new byte[(Width * Height * 3) + 40 + 14 + 1]; var frameInfo = new SerNativeFrameInfo(); TangraCore.SERGetFrame(index, pixels, unprocessedPixels, rawBitmapBytes, displayBitmapBytes, (ushort)BitPix, ref frameInfo); m_CurrentFrameInfo = new SerFrameInfo(frameInfo); using (var memStr = new MemoryStream(rawBitmapBytes)) { Bitmap displayBitmap; try { displayBitmap = (Bitmap)Bitmap.FromStream(memStr); } catch (Exception ex) { Trace.WriteLine(ex.GetFullStackTrace()); displayBitmap = new Bitmap(Width, Height); } var rv = new Pixelmap(Width, Height, BitPix, pixels, displayBitmap, displayBitmapBytes); rv.UnprocessedPixels = unprocessedPixels; rv.FrameState = new FrameStateData() { SystemTime = m_CurrentFrameInfo.TimeStampUtc }; if (UseTimeStamp != SerUseTimeStamp.None) { if (UseTimeStamp == SerUseTimeStamp.FireCaptureLog) { DateTime dt; if (m_FireCaptureTimeStamps.TryGetValue(1 + index, out dt)) rv.FrameState.CentralExposureTime = dt; } else if (UseTimeStamp == SerUseTimeStamp.SerEmbeddedUtcTime) { rv.FrameState.CentralExposureTime = m_CurrentFrameInfo.TimeStampUtc; } } return rv; } }
public Pixelmap GetIntegratedFrame(int startFrameNo, int framesToIntegrate, bool isSlidingIntegration, bool isMedianAveraging) { if (startFrameNo < FirstFrame || startFrameNo > LastFrame) throw new ApplicationException("Invalid frame position: " + startFrameNo); int actualFramesToIntegrate = Math.Min(startFrameNo + framesToIntegrate, LastFrame - 1) - startFrameNo; uint[] pixels = new uint[Width * Height]; uint[] unprocessedPixels = new uint[Width * Height]; byte[] displayBitmapBytes = new byte[Width * Height]; byte[] rawBitmapBytes = new byte[(Width * Height * 3) + 40 + 14 + 1]; var frameInfo = new SerNativeFrameInfo(); TangraCore.SERGetIntegratedFrame(startFrameNo, actualFramesToIntegrate, isSlidingIntegration, isMedianAveraging, pixels, unprocessedPixels, rawBitmapBytes, displayBitmapBytes, (ushort)BitPix, ref frameInfo); m_CurrentFrameInfo = new SerFrameInfo(frameInfo); using (var memStr = new MemoryStream(rawBitmapBytes)) { Bitmap displayBitmap = (Bitmap)Bitmap.FromStream(memStr); var rv = new Pixelmap(Width, Height, BitPix, pixels, displayBitmap, displayBitmapBytes); rv.UnprocessedPixels = unprocessedPixels; rv.FrameState = new FrameStateData() { SystemTime = m_CurrentFrameInfo.TimeStampUtc }; if (UseTimeStamp != SerUseTimeStamp.None) { if (UseTimeStamp == SerUseTimeStamp.FireCaptureLog) { DateTime dt, dt2; if (actualFramesToIntegrate % 2 == 0 && actualFramesToIntegrate > 1) { if ( m_FireCaptureTimeStamps.TryGetValue(startFrameNo + actualFramesToIntegrate/2, out dt) && m_FireCaptureTimeStamps.TryGetValue(1 + startFrameNo + actualFramesToIntegrate/2, out dt2)) { rv.FrameState.CentralExposureTime = dt.AddTicks((dt2 - dt).Ticks/2); } } else { if (m_FireCaptureTimeStamps.TryGetValue(1 + startFrameNo + actualFramesToIntegrate / 2, out dt)) rv.FrameState.CentralExposureTime = dt; } } else if (UseTimeStamp == SerUseTimeStamp.SerEmbeddedUtcTime) { rv.FrameState.CentralExposureTime = m_CurrentFrameInfo.TimeStampUtc; } } return rv; } }