private void ProcessFile(FileStream file, XRITHeader header, string outputFolder) { int bytesToRead = (int)(file.Length - header.PrimaryHeader.HeaderLength); var buffer = new byte[bytesToRead]; file.Read(buffer, 0, bytesToRead); string outName = header.Filename.Replace(".lrit", ".txt"); outName = Path.Combine(outputFolder, outName); var fo = File.OpenWrite(outName); fo.Write(buffer, 0, bytesToRead); fo.Close(); EventMaster.Post(EventTypes.NewFileEvent, new NewFileReceivedEventData { Name = Path.GetFileName(outName), Path = outName, Metadata = { { "product", header.Product.Name }, { "subProduct", header.SubProduct.Name }, { "productId", header.Product.ID.ToString() }, { "subProductId", header.SubProduct.ID.ToString() } } }); }
void ProcessCompressedFile(FileStream file, XRITHeader header, string outputFolder) { string outName; if (header.NOAASpecificHeader.Compression == CompressionType.GIF) { outName = header.Filename.Replace(".lrit", ".gif"); outName = Path.Combine(outputFolder, outName); var file2 = File.OpenWrite(outName); byte[] buffer = new Byte[1024]; int bytesRead; while ((bytesRead = file.Read(buffer, 0, 1024)) > 0) { file2.Write(buffer, 0, bytesRead); } file2.Close(); } else if (header.NOAASpecificHeader.Compression == CompressionType.JPEG) { outName = header.Filename.Replace(".lrit", ".jpg"); outName = Path.Combine(outputFolder, outName); var file2 = File.OpenWrite(outName); byte[] buffer = new Byte[1024]; int bytesRead; while ((bytesRead = file.Read(buffer, 0, 1024)) > 0) { file2.Write(buffer, 0, bytesRead); } file2.Close(); } else { throw new Exception(string.Format("Unknown Compression type: {0}", header.NOAASpecificHeader.Compression.ToString())); } EventMaster.Post(EventTypes.NewFileEvent, new NewFileReceivedEventData { Name = Path.GetFileName(outName), Path = outName, Metadata = { { "product", header.Product.Name }, { "subProduct", header.SubProduct.Name }, { "productId", header.Product.ID.ToString() }, { "subProductId", header.SubProduct.ID.ToString() } } }); }
public OrganizerData() { Segments = new Dictionary <int, string>(); Lines = -1; Columns = -1; PixelAspect = -1; ColumnOffset = 0; MaxSegments = 1; OK = false; Timestamp = 0; FirstSegment = 999999; Code = DateTime.UtcNow.ToShortTimeString(); FileHeader = null; }
public static void LoadLRIT() { UIConsole.Log($"Loading Headers from Visible file at {visFilename}"); XRITHeader header = FileParser.GetHeaderFromFile(visFilename); Regex x = new Regex(@".*\((.*)\)", RegexOptions.IgnoreCase); var regMatch = x.Match(header.ImageNavigationHeader.ProjectionName); satelliteLongitude = float.Parse(regMatch.Groups[1].Captures[0].Value, CultureInfo.InvariantCulture); var inh = header.ImageNavigationHeader; gc = new GeoConverter(satelliteLongitude, inh.ColumnOffset, inh.LineOffset, inh.ColumnScalingFactor, inh.LineScalingFactor); var od = new OrganizerData(); od.Segments.Add(0, visFilename); od.FirstSegment = 0; od.Columns = header.ImageStructureHeader.Columns; od.Lines = header.ImageStructureHeader.Lines; od.ColumnOffset = inh.ColumnOffset; od.PixelAspect = 1; UIConsole.Log($"Generating Visible Bitmap"); bmp = ImageTools.GenerateFullImage(od); if (bmp.PixelFormat != PixelFormat.Format32bppArgb) { bmp = bmp.ToFormat(PixelFormat.Format32bppArgb, true); } // od.Segments[0] = irfilename; irBmp = ImageTools.GenerateFullImage(od); if (bmp.PixelFormat != PixelFormat.Format32bppArgb) { bmp = bmp.ToFormat(PixelFormat.Format32bppArgb, true); } // Geo Converter latRange = new[] { gc.MinLatitude, gc.MaxLatitude }; lonRange = new[] { gc.MinLongitude, gc.MaxLongitude }; coverage = new[] { gc.LatitudeCoverage, gc.LongitudeCoverage }; trim = new[] { gc.TrimLatitude, gc.TrimLongitude }; size = new[] { (uint)bmp.Width, (uint)bmp.Height }; coff = inh.ColumnOffset; loff = inh.LineOffset; cfac = inh.ColumnScalingFactor; lfac = inh.LineScalingFactor; }
public static void HandleFile(string filename, XRITHeader fileHeader, DemuxManager dm = null) { if (dm != null) { dm.incProductCount(fileHeader.Product.ID); } if (byCompressionTypeHandler.ContainsKey((int)fileHeader.Compression)) { byCompressionTypeHandler[(int)fileHeader.Compression](filename, fileHeader); } else if (byProductIdHandler.ContainsKey(fileHeader.Product.ID)) { byProductIdHandler[fileHeader.Product.ID](filename, fileHeader); } else { DefaultHandler(filename, fileHeader); } }
public async void LoadLRIT() { await Task.Run(async() => { LockControls(); UIConsole.Log($"Loading Headers from Visible file at {visFilename}"); XRITHeader header = FileParser.GetHeaderFromFile(visFilename); Regex x = new Regex(@".*\((.*)\)", RegexOptions.IgnoreCase); var regMatch = x.Match(header.ImageNavigationHeader.ProjectionName); float satelliteLongitude = float.Parse(regMatch.Groups[1].Captures[0].Value, CultureInfo.InvariantCulture); var inh = header.ImageNavigationHeader; gc = new GeoConverter(satelliteLongitude, inh.ColumnOffset, inh.LineOffset, inh.ColumnScalingFactor, inh.LineScalingFactor); var od = new OrganizerData(); od.Segments.Add(0, visFilename); od.FirstSegment = 0; od.Columns = header.ImageStructureHeader.Columns; od.Lines = header.ImageStructureHeader.Lines; od.ColumnOffset = inh.ColumnOffset; od.PixelAspect = 1; UIConsole.Log($"Generating Visible Bitmap"); visBmp = ImageTools.GenerateFullImage(od); visBmp = ImageTools.ResizeImage(visBmp, visBmp.Width / 4, visBmp.Height / 4, true); od = new OrganizerData(); od.Segments.Add(0, irfilename); od.FirstSegment = 0; od.Columns = header.ImageStructureHeader.Columns; od.Lines = header.ImageStructureHeader.Lines; od.ColumnOffset = inh.ColumnOffset; od.PixelAspect = 1; UIConsole.Log($"Generating Infrared Bitmap"); irBmp = ImageTools.GenerateFullImage(od); irBmp = ImageTools.ResizeImage(irBmp, irBmp.Width / 4, irBmp.Height / 4, true); UIConsole.Log("Generating False Color"); await GenerateFalseColor(); UIConsole.Log("Done"); UnlockControls(); }); }
public static void HandleTextData(string filename, XRITHeader header) { if (header.PrimaryHeader.FileType == FileTypeCode.TEXT) { string basedir = FileHandler.FinalFileFolder; basedir = Path.Combine(basedir, TextFolder); try { UIConsole.Log($"New {header.ToNameString()}"); if (!Directory.Exists(basedir)) { Directory.CreateDirectory(basedir); } TextHandler.Handler.HandleFile(filename, basedir); File.Delete(filename); } catch (Exception e) { UIConsole.Warn($"Failed to parse Weather Data Image at {Path.GetFileName(filename)}: {e}"); } } else { FileHandler.DefaultHandler(filename, header); } }
void ProcessFile(FileStream file, XRITHeader header, string outputFolder) { var width = header.ImageStructureHeader.Columns; var height = header.ImageStructureHeader.Lines; var bitsPerPixel = header.ImageStructureHeader.BitsPerPixel; if (header.NOAASpecificHeader.Compression != CompressionType.NO_COMPRESSION && header.NOAASpecificHeader.Compression != CompressionType.LRIT_RICE) { ProcessCompressedFile(file, header, outputFolder); return; } if (bitsPerPixel != 8 && bitsPerPixel != 1) { throw new Exception(string.Format("Unsupported bits per pixel {0}", bitsPerPixel)); } var format = bitsPerPixel == 8 ? PixelFormat.Format8bppIndexed : PixelFormat.Format1bppIndexed; var b = new Bitmap(width, height, format); var bytesToRead = (width * height); if (bitsPerPixel == 1) { bytesToRead = (8 * (bytesToRead + 7)) / 8; bytesToRead /= 8; } else { // Create grayscale palette ColorPalette pal = b.Palette; for (int i = 0; i <= 255; i++) { pal.Entries[i] = Color.FromArgb(i, i, i); } b.Palette = pal; } var buffer = new byte[bytesToRead]; file.Read(buffer, 0, bytesToRead); if (width % 8 == 0 || bitsPerPixel != 1) { var data = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.WriteOnly, format); if (data.Stride == width * bitsPerPixel / 8) { Marshal.Copy(buffer, 0, data.Scan0, buffer.Length); } else { // So our stride is bigger than our width (alignment issues). So let's copy line by line. int nwidth = width * bitsPerPixel / 8; for (int i = 0; i < height; i++) { Marshal.Copy(buffer, nwidth * i, IntPtr.Add(data.Scan0, i * data.Stride), nwidth); } } b.UnlockBits(data); } else { // Hard mode, let's optimize this in the future. b = new Bitmap(width, height, PixelFormat.Format24bppRgb); var z = 0; for (int i = 0; i < bytesToRead; i++) { for (int k = 7; k >= 0; k--) { var x = z % width; var y = z / width; bool bitset = ((buffer[i] >> k) & 1) == 1; if (x < width && y < height) { b.SetPixel(x, y, Color.FromArgb((int)(bitset ? 0xFFFFFFFF : 0x0))); } z++; } } } string outName = header.Filename.Replace(".lrit", ".jpg"); outName = Path.Combine(outputFolder, outName); b.Save(outName, ImageFormat.Jpeg); b.Dispose(); EventMaster.Post(EventTypes.NewFileEvent, new NewFileReceivedEventData { Name = Path.GetFileName(outName), Path = outName, Metadata = { { "product", header.Product.Name }, { "subProduct", header.SubProduct.Name }, { "productId", header.Product.ID.ToString() }, { "subProductId", header.SubProduct.ID.ToString() } } }); }
public static void DefaultHandler(string filename, XRITHeader fileHeader) { string dir = Path.GetDirectoryName(filename); string ofilename = fileHeader.Filename ?? Path.GetFileName(filename); // Workarround for multi-segment HRIT if (fileHeader.Product.ID == (int)NOAAProductID.GOES16_ABI) { if (fileHeader.SegmentIdentificationHeader != null && fileHeader.SegmentIdentificationHeader.MaxSegments > 1) { string baseName = Path.GetFileNameWithoutExtension(ofilename); string ext = Path.GetExtension(ofilename); string fileH = fileHeader.SegmentIdentificationHeader.Sequence.ToString("D2"); string imageId = fileHeader.SegmentIdentificationHeader.ImageID.ToString(); ofilename = $"{baseName}-img{imageId}-seg{fileH}{ext}"; } } string f = PacketManager.FixFileFolder(dir, ofilename, fileHeader.Product, fileHeader.SubProduct); if ( (fileHeader.Product.ID == (int)NOAAProductID.DCS && SkipDCS) || (fileHeader.Product.ID == (int)NOAAProductID.EMWIN && SkipEMWIN) || (fileHeader.Product.ID == (int)NOAAProductID.HRIT_EMWIN && SkipEMWIN) || (fileHeader.Product.ID == (int)NOAAProductID.WEATHER_DATA && SkipWeatherData) ) { try { File.Delete(filename); } catch (IOException e) { UIConsole.Error(String.Format("Error deleting file {0}: {1}", Path.GetFileName(filename), e)); } return; } if (File.Exists(f)) { string timestamp = DateTime.Now.ToString("yyyyMMddHHmmssffff"); string ext = Path.GetExtension(f); string append = String.Format("--dup-{0}{1}", timestamp, ext); f = f.Replace(String.Format("{0}", ext), append); } UIConsole.Log($"New {fileHeader.ToNameString()}"); /*if (fileHeader.SubProduct.Name != "Unknown") { * UIConsole.Log($"New {fileHeader.Product.Name} - {fileHeader.SubProduct.Name}"); * } else { * UIConsole.Log($"New {fileHeader.Product.Name}"); * }*/ EventMaster.Post(EventTypes.NewFileEvent, new NewFileReceivedEventData { Name = Path.GetFileName(ofilename), Path = ofilename, Metadata = { { "product", fileHeader.Product.Name }, { "subProduct", fileHeader.SubProduct.Name }, { "productId", fileHeader.Product.ID.ToString() }, { "subProductId", fileHeader.SubProduct.ID.ToString() } } }); try { File.Move(filename, f); } catch (IOException e) { UIConsole.Error(String.Format("Error moving file {0} to {1}: {2}", filename, f, e)); } }
public void FinishMSDU(MSDU msdu) { try { if (msdu.APID == 2047) { // Skip fill packet return; } bool firstOrSinglePacket = msdu.Sequence == SequenceType.FIRST_SEGMENT || msdu.Sequence == SequenceType.SINGLE_DATA; Packets++; if (manager != null) { manager.Packets++; } if (!msdu.Valid) { CRCFails++; if (manager != null) { manager.CRCFails++; } } if (manager != null) { LengthFails++; if (!msdu.Full) { manager.LengthFails++; } } if (!msdu.Valid || !msdu.Full) { if (msdu.FrameLost) { UIConsole.Error($"Lost some frames on MSDU, the file will be corrupted. CRC Match: {msdu.Valid} - Size Match: {msdu.Full}"); } else { UIConsole.Error($"Corrupted MSDU. CRC Match: {msdu.Valid} - Size Match: {msdu.Full}"); } } if (msdu.Sequence == SequenceType.FIRST_SEGMENT || msdu.Sequence == SequenceType.SINGLE_DATA) { if (startnum != -1) { UIConsole.Warn("Received First Segment but last data wasn't finished! Forcing dump."); // This can only happen for multi-segment file. filename = Path.Combine(FileHandler.TemporaryFileFolder, channelId.ToString()); filename = Path.Combine(filename, $"{lastMSDU.APID}_{lastMSDU.Version}.lrit"); FileHandler.HandleFile(filename, fileHeader, manager); startnum = -1; endnum = -1; } fileHeader = FileParser.GetHeader(msdu.Data.Skip(10).ToArray()); if (msdu.Sequence == SequenceType.FIRST_SEGMENT) { startnum = msdu.PacketNumber; } } else if (msdu.Sequence == SequenceType.LAST_SEGMENT) { endnum = msdu.PacketNumber; if (startnum == -1) { // Orphan Packet endnum = -1; return; } } else if (msdu.Sequence != SequenceType.SINGLE_DATA && startnum == -1) { // Orphan Packet return; } // LRIT EMWIN /* Uncomment to enable EMWIN Ingestor * Its broken right now * if (fileHeader.PrimaryHeader.FileType == FileTypeCode.EMWIN) { * //Ingestor * int offset = 10 + (int)fileHeader.PrimaryHeader.HeaderLength; * EMWIN.Ingestor.Process(msdu.Data.Skip(offset).ToArray()); * return; * } */ string path = Path.Combine(FileHandler.TemporaryFileFolder, channelId.ToString()); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } filename = Path.Combine(path, $"{msdu.APID}_{msdu.Version}.lrit"); byte[] dataToSave = msdu.Data.Skip(firstOrSinglePacket ? 10 : 0).Take(firstOrSinglePacket ? msdu.PacketLength - 10 : msdu.PacketLength).ToArray(); if (fileHeader.Compression == CompressionType.LRIT_RICE && !firstOrSinglePacket) { int missedPackets = lastMSDU.PacketNumber - msdu.PacketNumber - 1; if (lastMSDU.PacketNumber == 16383 && msdu.PacketNumber == 0) { missedPackets = 0; } if (missedPackets > 0) { UIConsole.Warn(String.Format("Missed {0} packets on image. Filling with null bytes. Last Packet Number: {1} Current: {2}", missedPackets, lastMSDU.PacketNumber, msdu.PacketNumber)); byte[] fill = Decompress.GenerateFillData(fileHeader.ImageStructureHeader.Columns); using (FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write)) { using (BinaryWriter sw = new BinaryWriter(fs)) { while (missedPackets > 0) { sw.Write(fill); missedPackets--; } sw.Flush(); } } } dataToSave = Decompress.InMemoryDecompress(dataToSave, fileHeader.ImageStructureHeader.Columns, fileHeader.RiceCompressionHeader.Pixel, fileHeader.RiceCompressionHeader.Flags); } lastMSDU = msdu; using (FileStream fs = new FileStream(filename, firstOrSinglePacket ? FileMode.Create : FileMode.Append, FileAccess.Write)) { using (BinaryWriter sw = new BinaryWriter(fs)) { sw.Write(dataToSave); sw.Flush(); } } if (msdu.Sequence == SequenceType.LAST_SEGMENT || msdu.Sequence == SequenceType.SINGLE_DATA) { FileHandler.HandleFile(filename, fileHeader, manager); startnum = -1; endnum = -1; } } catch (Exception e) { UIConsole.Error(String.Format("Exception on FinishMSDU: {0}", e)); } }
public static string DumpFile(string filename, XRITHeader fileHeader, string newExt, bool forceErase = false) { string dir = Path.GetDirectoryName(filename); string f = FixFileFolder(dir, fileHeader.Filename, fileHeader.Product, fileHeader.SubProduct); f = f.Replace(".lrit", "." + newExt); if ( FileHandler.SkipEMWIN && fileHeader.Product.ID == (int)NOAAProductID.HRIT_EMWIN || FileHandler.SkipWeatherData && f.Contains(WeatherDataFolder) ) { try { File.Delete(filename); } catch (Exception) { // Do nothing, file doesn't exists } return(null); } if (File.Exists(f)) { string timestamp = DateTime.Now.ToString("yyyyMMddHHmmssffff"); string ext = Path.GetExtension(f); string append = String.Format("--dup-{0}{1}", timestamp, ext); f = f.Replace(String.Format("{0}", ext), append); } UIConsole.Log($"New {fileHeader.ToNameString()}"); /* * if (fileHeader.SubProduct.Name != "Unknown") { * UIConsole.Log(String.Format("New {0} - {1} ({2})", fileHeader.Product.Name, fileHeader.SubProduct.Name, fileHeader.Filename)); * } else { * UIConsole.Log(String.Format("New {0} ({1})", fileHeader.Product.Name, fileHeader.Filename)); * }*/ FileStream fs = File.OpenRead(filename); fs.Seek(fileHeader.PrimaryHeader.HeaderLength, SeekOrigin.Begin); FileStream os = File.OpenWrite(f); byte[] buffer = new Byte[1024]; int bytesRead; while ((bytesRead = fs.Read(buffer, 0, 1024)) > 0) { os.Write(buffer, 0, bytesRead); } fs.Close(); os.Close(); if (f.Contains(".zip")) { UIConsole.Log(String.Format("Extracting Zip File {0}", Path.GetFileName(f))); ExtractZipFile(f); } else { EventMaster.Post(EventTypes.NewFileEvent, new NewFileReceivedEventData { Name = fileHeader.Filename, Path = f, Metadata = { { "product", fileHeader.Product.Name }, { "subProduct", fileHeader.SubProduct.Name }, { "productId", fileHeader.Product.ID.ToString() }, { "subProductId", fileHeader.SubProduct.ID.ToString() } } }); } if (!forceErase) { // Keep the original lrit file File.Move(filename, f.Replace("." + newExt, ".lrit")); return(f.Replace("." + newExt, ".lrit")); } else { try { File.Delete(filename); } catch (Exception) { // Do nothing, file doesn't exists } return(null); } }
public static void HandleWeatherData(string filename, XRITHeader header) { if (header.Filename.Contains("KWIN")) { // HRIT EMWIN wrongly has product id of weather data if (FileHandler.SkipEMWIN) { try { File.Delete(filename); } catch (Exception) { // Do nothing, file doesn't exists } return; } string fz = null; switch (header.Compression) { case CompressionType.ZIP: fz = DumpFile(filename, header, "zip"); break; case CompressionType.GIF: fz = DumpFile(filename, header, "gif"); break; case CompressionType.JPEG: fz = DumpFile(filename, header, "jpg"); break; case CompressionType.NO_COMPRESSION: fz = DumpFile(filename, header, "txt"); break; default: fz = DumpFile(filename, header, "bin"); break; } if (fz != null) { try { File.Delete(fz); } catch (Exception) { // Do nothing, file doesn't exists } } } else if (header.PrimaryHeader.FileType == FileTypeCode.IMAGE) { string basedir = FileHandler.FinalFileFolder; if (header.Product.ID == (int)NOAAProductID.OTHER_SATELLITES_1 || header.Product.ID == (int)NOAAProductID.OTHER_SATELLITES_2) { basedir = Path.Combine(basedir, OtherSatellitesFolder); } else { basedir = Path.Combine(basedir, WeatherDataFolder); } try { UIConsole.Log($"New {header.ToNameString()}"); //UIConsole.Log($"New Weather Data - {header.SubProduct.Name}"); if (!Directory.Exists(basedir)) { Directory.CreateDirectory(basedir); } ImageHandler.Handler.HandleFile(filename, basedir); File.Delete(filename); } catch (Exception e) { UIConsole.Warn($"Failed to parse Weather Data Image at {Path.GetFileName(filename)}: {e}"); } } else if (header.PrimaryHeader.FileType == FileTypeCode.TEXT) { string fz = DumpFile(filename, header, "txt"); if (fz != null) { try { File.Delete(fz); } catch (Exception) { // Do nothing, file doesn't exists } } } else { FileHandler.DefaultHandler(filename, header); } }
public static void Main(string[] args) { Console.WriteLine($"XRIT Version: {LibInfo.Version}"); AppDomain.CurrentDomain.UnhandledException += CrashReport.DefaultExceptionHandler; //* //Organizer org = new Organizer("./himawari"); //org.Update(); //var gd = org.GroupData[1490489400]; //var od = gd.Infrared; /* * Console.WriteLine("Initializing organizer"); * Organizer org = new Organizer("/home/lucas/Works/OpenSatelliteProject/split/goesdump/XRITLibraryTest/bin/Debug/channels/Images/Full Disk/"); * org.Update(); * int k = 0; * int c = 0; * foreach (var z in org.GroupData.Keys) { * k = z; * c++; * if (c == 2) { // 20 For US * break; * } * } * var gd = org.GroupData[k]; * var od = gd.Visible; * * Console.WriteLine("Initializing GeoConverter"); * var gc = new GeoConverter(gd.SatelliteLongitude, gd.ColumnOffset, gd.LineOffset, gd.ColumnScalingFactor, gd.LineScalingFactor, true, od.Columns); * * Console.WriteLine("Generating BMP"); * //var bmp = ImageTools.GenerateFullImage(od); * var bmp = ImageTools.GenerateFalseColor(gd); * var mapDrawer = new MapDrawer("/home/lucas/Works/OpenSatelliteProject/split/borders/ne_10m_admin_1_states_provinces.shp"); * //var mapDrawer = new MapDrawer("/home/lucas/Works/OpenSatelliteProject/split/borders/ne_50m_admin_0_countries.shp"); * Console.WriteLine("Drawing Map"); * mapDrawer.DrawMap(ref bmp, gc, Color.Aqua, 2, true); * * Console.WriteLine("Drawing LatLon Lines"); * ImageTools.DrawLatLonLines(ref bmp, gc, Color.Brown, 1, true); * * bmp.Save("unitedstates.jpg", ImageFormat.Jpeg); * bmp.Dispose(); * // */ ///* string filename = "./OR_ABI-L2-CMIPF-M3C13_G16_s20170861545382_e20170861556160_c20170861556231.lrit"; string visFilename = "./OR_ABI-L2-CMIPF-M3C02_G16_s20170861545382_e20170861556149_c20170861556217.lrit"; XRITHeader header = FileParser.GetHeaderFromFile(filename); Console.WriteLine($"Parsing file {header.Filename}"); Regex x = new Regex(@".*\((.*)\)", RegexOptions.IgnoreCase); var regMatch = x.Match(header.ImageNavigationHeader.ProjectionName); float satelliteLongitude = float.Parse(regMatch.Groups[1].Captures[0].Value, CultureInfo.InvariantCulture); var inh = header.ImageNavigationHeader; var gc = new GeoConverter(satelliteLongitude, inh.ColumnOffset, inh.LineOffset, inh.ColumnScalingFactor, inh.LineScalingFactor); var od = new OrganizerData(); od.Segments.Add(0, filename); od.FirstSegment = 0; od.Columns = header.ImageStructureHeader.Columns; od.Lines = header.ImageStructureHeader.Lines; od.ColumnOffset = inh.ColumnOffset; od.PixelAspect = 1; var bmp = ImageTools.GenerateFullImage(od); od = new OrganizerData(); od.Segments.Add(0, visFilename); od.FirstSegment = 0; od.Columns = header.ImageStructureHeader.Columns; od.Lines = header.ImageStructureHeader.Lines; od.ColumnOffset = inh.ColumnOffset; od.PixelAspect = 1; var vbmp = ImageTools.GenerateFullImage(od); UIConsole.GlobalEnableDebug = true; var shapeFile = ShapeFiles.InitShapeFiles(); //bmp.Save(filename + "-orig.png", ImageFormat.Png); //vbmp.Save(visFilename + "-orig.png", ImageFormat.Png); var mapDrawer = new MapDrawer(shapeFile); //ImageTools.DrawLatLonLines(ref bmp, gc, Color.Brown); ImageTools.ApplyCurve(OpenSatelliteProject.Presets.NEW_VIS_FALSE_CURVE, ref vbmp); vbmp = ImageTools.ToFormat(vbmp, PixelFormat.Format32bppArgb, true); bmp = ImageTools.ToFormat(bmp, PixelFormat.Format32bppArgb, true); ImageTools.Apply2DLut(OpenSatelliteProject.Presets.FalseColorLUTVal, ref vbmp, bmp); var startTime = LLTools.TimestampMS(); mapDrawer.DrawMap(ref vbmp, gc, Color.Yellow, 2, false, true); var delta = LLTools.TimestampMS() - startTime; Console.WriteLine($"Took {delta} ms to generate map."); vbmp.Save(visFilename + ".jpg", ImageFormat.Jpeg); Bitmap landMap = mapDrawer.GenerateLandMap(gc, bmp.Width, bmp.Height); landMap.Save(filename + "-landmap.jpg", ImageFormat.Jpeg); landMap.Dispose(); bmp.Dispose(); return; // */ /* * Bitmap test0 = (Bitmap) Bitmap.FromFile("test0.jpg"); * Bitmap test1 = (Bitmap) Bitmap.FromFile("test1.jpg"); * Bitmap overlay = (Bitmap) Bitmap.FromFile("goes13-fulldisk.jpg"); * * test0 = test0.ToFormat(PixelFormat.Format24bppRgb, true); * * overlay.Save("hue.jpg", ImageFormat.Jpeg); * * ImageTools.ApplyOverlay(ref test0, overlay); * test0.Save("test0-ovl.jpg", ImageFormat.Jpeg); * * ImageTools.ApplyOverlay(ref test1, overlay); * test1.Save("test1-ovl.jpg", ImageFormat.Jpeg); * * test0.Dispose(); * test1.Dispose(); * overlay.Dispose(); */ //* //string dcsFile = "/home/lucas/Works/OpenSatelliteProject/split/goesdump/XRITLibraryTest/bin/Debug/channels/DCS/pM-17085003239-A.dcs"; //List<DCSHeader> d = DCSParser.parseDCS(dcsFile); //* //string debugFrames = "/media/ELTN/tmp/demuxdump-1490627438.bin"; //string debugFrames = "/media/ELTN/tmp/debug5/demuxdump-1492732814.bin"; //string debugFrames = "/home/lucas/Works/OpenSatelliteProject/split/issues/trango/3/debug_frames.bin"; //string debugFrames = "/media/ELTN/tmp/debug3/raw_data.bin"; /* * var mapDrawer = new MapDrawer("/home/lucas/Works/OpenSatelliteProject/split/borders/ne_50m_admin_0_countries.shp"); * var fList = mapDrawer.ShapeFile.Features.ToList (); * var bmp = new Bitmap (1280, 720, PixelFormat.Format24bppRgb); * using (var graphics = Graphics.FromImage (bmp)) { * Brush bgBrush = new SolidBrush (Color.Black); * Brush polyBrush = new SolidBrush (Color.White); * graphics.FillRectangle (bgBrush, 0, 0, 1280, 720); * int o = 0; * foreach (var fo in fList) { * Console.WriteLine ($"Writting Geometry {o}"); * Pen pen = new Pen(Color.FromArgb((int)((255.0 * o) / fList.Count), 127, 127), 3); * o++; * for (var n = 0; n < fo.NumGeometries; n++) { * //Console.WriteLine ($"Writting Geometry {n}"); * var fg = fo.GetBasicGeometryN (n); * var k = fg.Coordinates; * * float lastX = float.NaN; * float lastY = float.NaN; * * List<PointF> points = new List<PointF> (); * foreach (var z in k) { * float lon = (float)z.X; * float lat = (float)z.Y; * * float X = bmp.Width / 2 + bmp.Width * (lon / 360); * float Y = bmp.Height / 2 - bmp.Height * (lat / 180); * * if (!float.IsNaN (lastX) && !float.IsNaN (lastY)) { * //graphics.DrawLine (pen, lastX, lastY, X, Y); * } * lastX = X; * lastY = Y; * * points.Add (new PointF (X, Y)); * } * graphics.FillPolygon(polyBrush, points.ToArray()); * } * } * } * Console.WriteLine ("Saving"); * bmp.Save ("/home/lucas/test.png", ImageFormat.Png); * bmp.Dispose (); * Console.WriteLine ("Done"); * return; */ EventMaster.On("newFile", d => { var ed = (NewFileReceivedEventData)d.Data; //Console.WriteLine($"Received event for new file {ed.Name} at {ed.Path}"); //Console.WriteLine(ed.ToString()); }); Console.WriteLine("Hash: " + LibInfo.CommitID); Console.WriteLine("Log: " + LibInfo.LogLines); Console.WriteLine("Short Hash: " + LibInfo.ShortCommitID); Console.WriteLine("Version: " + LibInfo.Version); //string debugFrames = "/media/ELTN/tmp/demuxdump-1490627438.bin"; //string debugFrames = "/media/ELTN/tmp/G16JuneTest/demuxdump-1496790733.bin"; //string debugFrames = "/media/ELTN/tmp/G16JuneTest/demuxdump-1500179126.bin"; //string debugFrames = "/media/ELTN/tmp/debug14/demuxdump-1495166529.bin"; string debugFrames = "/media/ELTN/tmp/trango/demuxdump-1500736657.bin"; //var mapDrawer = new MapDrawer("/home/lucas/Works/OpenSatelliteProject/split/borders/ne_10m_admin_1_states_provinces.shp"); var im0 = new ImageManager("output/Images/Full Disk/"); var im1 = new ImageManager("output/Images/Northern Hemisphere/"); var im2 = new ImageManager("output/Images/Southern Hemisphere/"); var im3 = new ImageManager("output/Images/Area of Interest/"); var im4 = new ImageManager("output/Images/United States/"); var im5 = new ImageManager("output/Images/FM1/"); var im6 = new ImageManager("output/Images/Unknown/"); im0.InitMapDrawer(); im1.InitMapDrawer(); im2.InitMapDrawer(); im3.InitMapDrawer(); im4.InitMapDrawer(); im5.InitMapDrawer(); im6.InitMapDrawer(); ImageManager.GenerateVisible = true; ImageManager.GenerateInfrared = true; ImageManager.GenerateFalseColor = true; ImageManager.GenerateWaterVapour = true; ImageManager.GenerateOtherImages = true; ImageManager.EraseFiles = false; ImageManager.UseNOAAFileFormat = true; ImageManager.GenerateLatLonOverlays = true; ImageManager.GenerateMapOverlays = true; ImageManager.GenerateLabels = true; ImageManager.GenerateLatLonLabel = true; ImageManager.SaveNonOverlay = false; //im0.Start (); //im1.Start (); //im2.Start (); //im3.Start (); //im4.Start (); im5.Start(); //im6.Start (); // */ //*/ // /* /* * DemuxManager dm = new DemuxManager (); * FileHandler.SkipDCS = true; * FileHandler.SkipEMWIN = true; * //const int startFrame = 956000; * const int startFrame = 0; * FileStream file = File.OpenRead (debugFrames); * byte[] data = new byte[892]; * long bytesRead = startFrame * 892; * long bytesToRead = file.Length; * int frameN = startFrame; * file.Position = bytesRead; * while (bytesRead < bytesToRead) { * if (frameN % 1000 == 0) { * //Console.WriteLine("Injecting Frame {0}", frameN); * } * bytesRead += file.Read (data, 0, 892); * dm.parseBytes (data); * frameN++; * } * * Console.WriteLine ("CRC Fails: {0}", dm.CRCFails); * Console.WriteLine ("Bugs: {0}", dm.Bugs); * Console.WriteLine ("Frame Loss: {0}", dm.FrameLoss); * Console.WriteLine ("Length Fails: {0}", dm.LengthFails); * Console.WriteLine ("Packets: {0}", dm.Packets); * * Console.WriteLine ("Received Products: "); * foreach (int pID in dm.ProductsReceived.Keys) { * Console.WriteLine ("\t{0}: {1}", ((NOAAProductID)pID).ToString (), dm.ProductsReceived [pID]); * } * //*/ //im.Stop(); //*/ //ProcessFile("/home/lucas/Works/OpenSatelliteProject/split/goesdump/goesdump/bin/Debug/channels/Text/NWSTEXTdat043204159214.lrit"); /* * Organizer organizer = new Organizer("/home/lucas/Works/OpenSatelliteProject/split/goesdump/goesdump/bin/Debug/channels/Images/Full Disk"); * organizer.Update(); * * var data = organizer.GroupData; * * foreach (var z in data) { * var mData = z.Value; * var bmp = ImageTools.GenerateFalseColor(mData); * * if (bmp != null) { * bmp.Save(string.Format("{0}-{1}-{2}-{3}.jpg", mData.SatelliteName, mData.RegionName, "FLSCLR", z.Key), ImageFormat.Jpeg); * bmp.Dispose(); * mData.IsProcessed = true; * } else { * if (mData.Visible.IsComplete && mData.Visible.MaxSegments != 0) { * bmp = ImageTools.GenerateFullImage(mData.Visible); * bmp.Save(string.Format("{0}-{1}-{2}-{3}.jpg", mData.SatelliteName, mData.RegionName, "VIS", z.Key), ImageFormat.Jpeg); * bmp.Dispose(); * } * if (mData.Infrared.IsComplete && mData.Infrared.MaxSegments != 0) { * bmp = ImageTools.GenerateFullImage(mData.Infrared); * bmp.Save(string.Format("{0}-{1}-{2}-{3}.jpg", mData.SatelliteName, mData.RegionName, "IR", z.Key), ImageFormat.Jpeg); * bmp.Dispose(); * } * if (mData.WaterVapour.IsComplete && mData.WaterVapour.MaxSegments != 0) { * bmp = ImageTools.GenerateFullImage(mData.WaterVapour); * bmp.Save(string.Format("{0}-{1}-{2}-{3}.jpg", mData.SatelliteName, mData.RegionName, "WV", z.Key), ImageFormat.Jpeg); * bmp.Dispose(); * } * Console.WriteLine("Not all segments available!"); * } * } * * * //*/ /* * string visFile = "/home/lucas/Works/OpenSatelliteProject/split/samples/FD 26-02-17 2106 G13VI.jpg"; * string irFile = "/home/lucas/Works/OpenSatelliteProject/split/samples/FD 26-02-17 2106 G13IR.jpg"; * * Bitmap vis = new Bitmap(visFile); * ImageTools.ApplyCurve(Presets.VIS_FALSE_CURVE, ref vis); * vis.Save("test.jpg", ImageFormat.Jpeg); * //vis = vis.ToFormat(PixelFormat.Format32bppArgb, true); * * Bitmap ir = new Bitmap(irFile); * ir = ir.ToFormat(PixelFormat.Format32bppArgb, true); * ImageTools.ApplyLUT(Presets.THERMAL_FALSE_LUT, ref ir, 3); * ir.Save("test2.jpg", ImageFormat.Jpeg); * * ir = ir.ToFormat(PixelFormat.Format32bppArgb); * ImageTools.CombineHStoV(ref ir, vis); * * ir.Save("final.jpg", ImageFormat.Jpeg); * //*/ do { while (!Console.KeyAvailable) { Thread.Sleep(1000); } } while (Console.ReadKey(true).Key != ConsoleKey.Escape); }