Exemplo n.º 1
0
        public static void HandleFile(string filename, GRBImageHeader header)
        {
            string dir       = Path.GetDirectoryName(filename);
            string ofilename = header.filename ?? Path.GetFileName(filename);

            // Separate DQF
            string dqfFilename = $"{filename}.dqf";

            try {
                byte[] buffer = File.ReadAllBytes(filename);
                buffer = buffer.Skip((int)header.dqfOffset).ToArray();
                File.WriteAllBytes(dqfFilename, buffer);
            } catch (Exception) { }


            string productFolder = Products.GetFolderByAPID(header.apid);
            string bPath         = productFolder;
            string zPath         = Path.Combine(bPath, $"{header.epoch:D16}", $"{header.sequence:D8}");
            string f             = Path.Combine(FileHandler.FinalFileFolder, zPath);

            try {
                Directory.CreateDirectory(Path.Combine(FileHandler.FinalFileFolder, bPath, $"{header.epoch:D16}"));
            } catch (IOException e) {
                UIConsole.Error($"Cannot create directory {bPath}: {e}");
            }

            if (!ImageCache.ContainsKey(zPath))
            {
                ImageCache.Add(zPath, new ImageAssembler((int)header.width, (int)header.height));
                DQFCache.Add(zPath, new ImageAssembler((int)header.width, (int)header.height));
            }

            ImageCache[zPath].AppendJ2K(filename);
            DQFCache[zPath].AppendJ2K(dqfFilename);

            try {
                File.Delete(filename);
                File.Delete(dqfFilename);
            } catch (IOException e) {
                UIConsole.Error($"Error erasing file {filename}: {e}");
            }

            if (ImageCache[zPath].Done)
            {
                // UIConsole.Log ($"New image at {f}");
                // ImageCache [zPath].SavePGM ($"{f}.pgm");
                // ImageCache [zPath].SaveJPG ($"{f}.jpg");
                // File.WriteAllText($"{f}.txt", header.ToString());
                ProcessBigImage(bPath, ImageCache[zPath], header);
                ImageCache.Remove(zPath);
                // FIXME: Discarding DQF
                // DQFCache[zPath].SavePGM($"{f}.dqf.pgm");
                DQFCache.Remove(zPath);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Processes a new image part
        /// </summary>
        /// <param name="filename">Filename.</param>
        /// <param name="header">Header.</param>
        public void NewImage(string filename, GRBImageHeader header)
        {
            lock (syncLock) {
                if (ImageCache == null)
                {
                    if (SaveDQF)
                    {
                        DQF = new ImageAssembler((int)header.width, (int)header.height, Epoch);
                    }
                    ImageCache = new ImageAssembler((int)header.width, (int)header.height, Epoch);
                }

                if (SaveDQF)
                {
                    // Separate DQF
                    string dqfFilename = $"{filename}.dqf";
                    try {
                        byte[] buffer = File.ReadAllBytes(filename);
                        buffer = buffer.Skip((int)header.dqfOffset).ToArray();
                        File.WriteAllBytes(dqfFilename, buffer);
                    } catch (Exception e) {
                        UIConsole.Error($"Error slicing DQF file to {filename}.dqf: {e.Message}");
                        UIConsole.Debug($"{e}");
                    }

                    DQF.AppendJ2K(dqfFilename);
                    try {
                        File.Delete(dqfFilename);
                    } catch (IOException e) {
                        UIConsole.Error($"Error erasing file {filename}: {e.Message}");
                        UIConsole.Debug($"{e}");
                    }
                }

                ImageCache.AppendJ2K(filename);

                try {
                    File.Delete(filename);
                } catch (IOException e) {
                    UIConsole.Error($"Error erasing file {filename}: {e.Message}");
                    UIConsole.Debug($"{e}");
                }

                if (ImageCache.Done)
                {
                    ProcessBigImage(header);
                }
            }
        }
Exemplo n.º 3
0
        void ProcessBigImage(GRBImageHeader header)
        {
            if (FullImageCache == null)
            {
                var product = Products.GetProductByAPID(APID);
                var imsz    = (ImageSize)product.Meta[1];
                FullImageCache = new ImageAssembler(imsz.Width, imsz.Height, Epoch);
                if (SaveDQF)
                {
                    FullDQFCache = new ImageAssembler(imsz.Width, imsz.Height, Epoch);
                }
            }

            FullImageCache.DrawAt(ImageCache.Image, (int)header.ulX, (int)header.ulY + (int)header.rowOffset, true); // rowOffset to int might be bad
            if (SaveDQF)
            {
                FullDQFCache.DrawAt(DQF.Image, (int)header.ulX, (int)header.ulY + (int)header.rowOffset, true); // rowOffset to int might be bad
            }
            DQF        = null;
            ImageCache = null;
        }
Exemplo n.º 4
0
        static void ProcessBigImage(string bPath, ImageAssembler segment, GRBImageHeader header)
        {
            int    apid         = header.apid;
            ulong  currentEpoch = header.epoch;
            string imKey        = $"{apid:X3}-{currentEpoch}";
            var    product      = Products.GetProductByAPID(apid);
            var    imsz         = (ImageSize)product.Meta[1];

            if (APIDStamp.ContainsKey(apid) && APIDStamp[apid] != currentEpoch)
            {
                ulong  oldEpoch  = APIDStamp[apid];
                string oldImKey  = $"{apid:X3}-{oldEpoch}";
                string outfolder = Path.Combine(FileHandler.FinalFileFolder, bPath, oldEpoch.ToString());
                Task.Run(async() => {
                    var imas = BigImageCache[oldImKey];
                    // UIConsole.Log($"Saving{outfolder}.pgm");
                    await imas.AsyncSavePGM($"{outfolder}.pgm");
                    // UIConsole.Log($"Saving{outfolder}.png");
                    await imas.AsyncSavePNG($"{outfolder}.png");
                    BigImageCache[oldImKey] = null;
                    UIConsole.Log($"New {product.Name} at {outfolder}.pgm");
                });

                BigImageCache[imKey] = new ImageAssembler(imsz.Width, imsz.Height, currentEpoch);
                APIDStamp[apid]      = currentEpoch;
                // UIConsole.Debug($"Starting for {imKey} with expected size ({imsz.Width}, {imsz.Height})");
            }
            else if (!BigImageCache.ContainsKey(imKey))
            {
                BigImageCache[imKey] = new ImageAssembler(imsz.Width, imsz.Height, currentEpoch);
                APIDStamp[apid]      = currentEpoch;
                // UIConsole.Debug($"Starting for {imKey} with expected size ({imsz.Width}, {imsz.Height})");
            }
            // UIConsole.Debug ($"{header.apid:X3} - Drawing {header.sequence} at {header.ulX}, {header.ulY}");
            BigImageCache[imKey].DrawAt(segment.Image, (int)header.ulX, (int)header.ulY + (int)header.rowOffset, true); // rowOffset to int might be bad
        }
Exemplo n.º 5
0
 void HandleImage(string filename, GRBImageHeader header)
 {
     GRBFileHandler.HandleFile(filename, header);
 }