Example #1
0
        /// <summary>
        /// Opens the file for writing.
        /// </summary>
        /// <returns>The opened file.</returns>
        /// <param name="Path">Path to the output file.</param>
        /// <param name="Headers">FITS Headers to be written to the file.</param>
        public static MMapFitsFile OpenWriteFile(string Path, HeaderTable Headers)
        {
            FileInfo info = new FileInfo(Path);

            int HLength = ((Headers.Count * 80) + 2879) / 2880 * 2880;
            int DLength = HeaderIO.ComputeDataArrayLength(Headers) + 2879;

            DLength = DLength / 2880 * 2880;
            int FLength = HLength + DLength;

            MemoryMappedFile mmap    = MemoryMappedFile.CreateFromFile(Path, FileMode.Create, Guid.NewGuid().ToString(), FLength, MemoryMappedFileAccess.ReadWrite);
            Stream           s       = mmap.CreateViewStream();
            FitsFileBuilder  builder = new FitsFileBuilder()
            {
                PrimaryTable = new HeaderTable()
            };

            foreach (var w in Headers)
            {
                builder.PrimaryTable.Add(w.Key, w.Value); s.Write(((FITSMetadataRecord)w.Value).ToRawRecord(), 0, 80);
            }
            s.Write(Encoding.UTF8.GetBytes("END".PadRight(80)), 0, 80);
            while (s.Position < HLength)
            {
                s.Write(Encoding.UTF8.GetBytes(string.Empty.PadRight(80)), 0, 80);
            }
            builder.PrimaryDataPointer = HLength;
            s.Dispose();

            return(new MMapFitsFile(Path, true, null, builder, mmap, MemoryMappedFileAccess.ReadWrite));
        }
Example #2
0
        /// <summary>
        /// Open file for reading.
        /// </summary>
        /// <returns>The opened file.</returns>
        /// <param name="Path">Path to the file.</param>
        /// <param name="numberGetter">Delegate that generates the image numbers in a MEF FITS.</param>
        public static MMapFitsFile OpenReadFile(string Path, MEFImageNumberGetter numberGetter = null)
        {
            FileInfo         info = new FileInfo(Path);
            MemoryMappedFile mmap = MemoryMappedFile.CreateFromFile(Path, FileMode.Open, Guid.NewGuid().ToString(), 0, MemoryMappedFileAccess.Read);

            Stream          stream  = mmap.CreateViewStream(0, 0, MemoryMappedFileAccess.Read);
            FitsFileBuilder builder = HeaderIO.ReadFileHeaders(stream, info.Length, numberGetter);

            stream.Dispose();

            return(new MMapFitsFile(Path, false, numberGetter, builder, mmap, MemoryMappedFileAccess.Read));
        }
Example #3
0
        /// <summary>
        /// Opens a file from the given stream.
        /// </summary>
        /// <returns>The opened file.</returns>
        /// <param name="str">Input stream.</param>
        /// <param name="Length">Data length.</param>
        /// <param name="Path">Path to the data.</param>
        /// <param name="numberGetter">MEF naming policy.</param>
        public static NSStreamFitsFile OpenFile(Stream str, int Length, string Path, MEFImageNumberGetter numberGetter = null)
        {
            byte[] Data = new byte[Length];
            str.Read(Data, 0, Data.Length);

            FitsFileBuilder Headers;

            using (MemoryStream ms = new MemoryStream(Data))
                Headers = HeaderIO.ReadFileHeaders(ms, Length, numberGetter);

            return(new NSStreamFitsFile(Data, Path, false, numberGetter, Headers));
        }