private string SaveTiff(FileSaveInfo fileSaveInfo) { Directory.CreateDirectory(Path.GetDirectoryName(fileSaveInfo.FilePath)); string uniquePath = Utility.Utility.GetUniqueFilePath(fileSaveInfo.FilePath + ".tif"); using (FileStream fs = new FileStream(uniquePath, FileMode.Create)) { TiffBitmapEncoder encoder = new TiffBitmapEncoder(); switch (fileSaveInfo.TIFFCompressionType) { case TIFFCompressionTypeEnum.LZW: encoder.Compression = TiffCompressOption.Lzw; break; case TIFFCompressionTypeEnum.ZIP: encoder.Compression = TiffCompressOption.Zip; break; } encoder.Frames.Add(BitmapFrame.Create(RenderBitmapSource())); encoder.Save(fs); } return(uniquePath); }
private Task <string> SaveToDiskAsync(FileSaveInfo fileSaveInfo, CancellationToken cancelToken, bool forceFileType = false) { return(Task.Run(() => { string path = string.Empty; fileSaveInfo.FilePath = Path.Combine(fileSaveInfo.FilePath, Guid.NewGuid().ToString()); if (!forceFileType && Data.RAWData != null) { fileSaveInfo.FileType = FileTypeEnum.RAW; path = SaveRAW(fileSaveInfo.FilePath); } else { switch (fileSaveInfo.FileType) { case FileTypeEnum.FITS: path = SaveFits(fileSaveInfo); break; case FileTypeEnum.XISF: path = SaveXisf(fileSaveInfo); break; case FileTypeEnum.TIFF: default: path = SaveTiff(fileSaveInfo); break; } } return path; }, cancelToken)); }
public async Task PrepareFinalizeSavePatternMetaDataTest() { var data = new ushort[] { 3, 1, 1, 3, 4, 5, 3, 2, 3 }; var pattern = $"$$FILTER$$" + $"#$$DATE$$" + $"#$$DATEMINUS12$$" + $"#$$DATETIME$$" + $"#$$TIME$$" + $"#$$FRAMENR$$" + $"#$$IMAGETYPE$$" + $"#$$BINNING$$" + $"#$$SENSORTEMP$$" + $"#$$EXPOSURETIME$$" + $"#$$TARGETNAME$$" + $"#$$GAIN$$" + $"#$$OFFSET$$" + $"#$$RMS$$" + $"#$$RMSARCSEC$$" + $"#$$FOCUSERPOSITION$$" + $"#$$APPLICATIONSTARTDATE$$"; var fileSaveInfo = new FileSaveInfo { FilePath = TestContext.CurrentContext.TestDirectory, FilePattern = pattern, FileType = NINA.Utility.Enum.FileTypeEnum.XISF }; var sut = new ImageData(data, 3, 3, 16, false, MetaData); var file = await sut.PrepareSave(fileSaveInfo, default); file = sut.FinalizeSave(file, pattern); File.Delete(file); var expectedPattern = $"{MetaData.FilterWheel.Filter}" + $"#{MetaData.Image.ExposureStart.ToString("yyyy-MM-dd")}" + $"#{MetaData.Image.ExposureStart.AddHours(-12).ToString("yyyy-MM-dd")}" + $"#{MetaData.Image.ExposureStart.ToString("yyyy-MM-dd_HH-mm-ss")}" + $"#{MetaData.Image.ExposureStart.ToString("HH-mm-ss")}" + $"#{MetaData.Image.ExposureNumber.ToString("0000")}" + $"#{MetaData.Image.ImageType}" + $"#{MetaData.Camera.Binning}" + $"#{string.Format(CultureInfo.InvariantCulture, "{0:0.00}", MetaData.Camera.Temperature)}" + $"#{string.Format(CultureInfo.InvariantCulture, "{0:0.00}", MetaData.Image.ExposureTime)}" + $"#{MetaData.Target.Name}" + $"#{string.Format("{0:0}", MetaData.Camera.Gain)}" + $"#{string.Format("{0:0}", MetaData.Camera.Offset)}" + $"#{string.Format(CultureInfo.InvariantCulture, "{0:0.00}", MetaData.Image.RecordedRMS.Total)}" + $"#{string.Format(CultureInfo.InvariantCulture, "{0:0.00}", MetaData.Image.RecordedRMS.Total * MetaData.Image.RecordedRMS.Scale)}" + $"#{string.Format(CultureInfo.InvariantCulture, "{0:0.00}", MetaData.Focuser.Position)}" + $"#{Utility.ApplicationStartDate.ToString("yyyy-MM-dd")}"; Path.GetFileName(file).Should().Be($"{expectedPattern}.{fileSaveInfo.FileType.ToString().ToLower()}"); }
protected async Task <string> PrepareAndSaveImage(IImageData source, CancellationToken cancelToken) { FileSaveInfo fileSaveInfo = new FileSaveInfo { FilePath = WORKING_DIRECTORY, FilePattern = Path.GetRandomFileName(), FileType = FileTypeEnum.FITS }; return(await source.SaveToDisk(fileSaveInfo, cancelToken, forceFileType : true)); }
public XISFData(ushort[] data, FileSaveInfo fileSaveInfo) { CompressionType = fileSaveInfo.XISFCompressionType; ChecksumType = fileSaveInfo.XISFChecksumType;; ByteShuffling = fileSaveInfo.XISFByteShuffling; ShuffleItemSize = sizeof(ushort); Data = PrepareArray(data); Size = (uint)data.Length * sizeof(ushort); CompressedSize = CompressionType == XISFCompressionTypeEnum.NONE ? 0 : (uint)Data.Length; }
/// <summary> /// 根据文件Key删除文件 /// </summary> /// <param name="fileKey"></param> /// <param name="param"></param> /// <returns></returns> public void DeleteFile(string fileKey, params object[] param) { FileSaveInfo fileSaveInfo = _currentKey.GetFileSavePath(fileKey, param); var filehelper = new FileHelper { hostIp = fileSaveInfo.FileServer.hostip, password = fileSaveInfo.FileServer.password, username = fileSaveInfo.FileServer.username, startdirname = fileSaveInfo.FileServer.startdirname }; filehelper.DeleteFile(fileSaveInfo.Dirname, fileSaveInfo.Savefilename); }
/// <summary> /// </summary> /// <param name="fileKey"></param> /// <param name="param"></param> /// <returns></returns> public string GetFileStorePath(string fileKey, params object[] param) { FileSaveInfo fileSaveInfo = _currentKey.GetFileSavePath(fileKey, param); var filehelper = new FileHelper { hostIp = fileSaveInfo.FileServer.hostip, password = fileSaveInfo.FileServer.password, username = fileSaveInfo.FileServer.username, startdirname = fileSaveInfo.FileServer.startdirname }; return(filehelper.GetFileName(fileSaveInfo.Dirname, fileSaveInfo.Savefilename)); }
/// <summary> /// </summary> /// <param name="bytefile"></param> /// <param name="fileKey"></param> /// <param name="param"></param> /// <returns></returns> public string UpdateFile(byte[] bytefile, string fileKey, params object[] param) { FileSaveInfo fileSaveInfo = _currentKey.GetFileSavePath(fileKey, param); var filehelper = new FileHelper { hostIp = fileSaveInfo.FileServer.hostip, password = fileSaveInfo.FileServer.password, username = fileSaveInfo.FileServer.username, startdirname = fileSaveInfo.FileServer.startdirname }; filehelper.UpdateFile(fileSaveInfo.Dirname, fileSaveInfo.Savefilename, bytefile); return(fileKey); }
public string SaveFileBySpecifyName(byte[] bytefile, string fileKey, string specifyName) { FileSaveInfo fileSaveInfo = _currentKey.GetFileSavePath(fileKey); var filehelper = new FileHelper { hostIp = fileSaveInfo.FileServer.hostip, password = fileSaveInfo.FileServer.password, username = fileSaveInfo.FileServer.username, startdirname = fileSaveInfo.FileServer.startdirname }; filehelper.UpdateFile(fileSaveInfo.Dirname, specifyName, bytefile); return(fileKey); }
private string GetFilePath(FileSaveInfo fileInfo, string newFilename = null) { var startdirname = fileInfo.FileServer.startdirname; var apppath = System.AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\', '/');; startdirname = startdirname.Replace("|APP_BASE|", apppath); //var filepath = "" + startdirname + "/" + fileInfo.Dirname + "/" + fileInfo.Savefilename; var filepath = Path.Combine(startdirname, fileInfo.Dirname, newFilename ?? fileInfo.Savefilename); return(filepath); }
private string GetFilePath(FileSaveInfo fileInfo, string newFilename = null) { var startdirname = fileInfo.FileServer.startdirname; var apppath = System.AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\', '/'); ; startdirname = startdirname.Replace("|APP_BASE|", apppath); //var filepath = "" + startdirname + "/" + fileInfo.Dirname + "/" + fileInfo.Savefilename; var filepath = Path.Combine(startdirname, fileInfo.Dirname, newFilename ?? fileInfo.Savefilename); return filepath; }
private string SaveFits(FileSaveInfo fileSaveInfo) { FITS f = new FITS( Data.FlatArray, Properties.Width, Properties.Height ); f.PopulateHeaderCards(MetaData); Directory.CreateDirectory(Path.GetDirectoryName(fileSaveInfo.FilePath)); string uniquePath = Utility.Utility.GetUniqueFilePath(fileSaveInfo.FilePath + ".fits"); using (FileStream fs = new FileStream(uniquePath, FileMode.Create)) { f.Write(fs); } return(uniquePath); }
/// <summary> /// Saves file to application temp path /// </summary> /// <param name="fileType"></param> /// <param name="token"></param> /// <returns></returns> public async Task <string> PrepareSave(FileSaveInfo fileSaveInfo, CancellationToken cancelToken = default) { var actualPath = string.Empty; try { using (MyStopWatch.Measure()) { actualPath = await SaveToDiskAsync(fileSaveInfo, cancelToken, false); Logger.Debug($"Saving temporary image at {actualPath}"); } } catch (OperationCanceledException ex) { throw ex; } catch (Exception ex) { Logger.Error(ex); throw ex; } finally { } return(actualPath); }
public async Task <string> SaveToDisk(FileSaveInfo fileSaveInfo, CancellationToken token, bool forceFileType = false) { string actualPath = string.Empty; try { using (MyStopWatch.Measure()) { string tempPath = await SaveToDiskAsync(fileSaveInfo, token, forceFileType); actualPath = FinalizeSave(tempPath, fileSaveInfo.FilePattern); } } catch (OperationCanceledException ex) { throw ex; } catch (Exception ex) { Logger.Error(ex); throw ex; } finally { } return(actualPath); }
public async Task SaveToDiskPatternEmptyMetaDataTest() { var data = new ushort[] { 3, 1, 1, 3, 4, 5, 3, 2, 3 }; var pattern = $"$$FILTER$$" + $"#$$DATE$$" + $"#$$DATEMINUS12$$" + $"#$$DATETIME$$" + $"#$$TIME$$" + $"#$$FRAMENR$$" + $"#$$IMAGETYPE$$" + $"#$$BINNING$$" + $"#$$SENSORTEMP$$" + $"#$$EXPOSURETIME$$" + $"#$$TARGETNAME$$" + $"#$$GAIN$$" + $"#$$OFFSET$$" + $"#$$RMS$$" + $"#$$RMSARCSEC$$" + $"#$$FOCUSERPOSITION$$" + $"#$$APPLICATIONSTARTDATE$$"; var fileSaveInfo = new FileSaveInfo { FilePath = TestContext.CurrentContext.TestDirectory, FilePattern = pattern, FileType = NINA.Utility.Enum.FileTypeEnum.TIFF, TIFFCompressionType = NINA.Utility.Enum.TIFFCompressionTypeEnum.LZW }; var sut = new ImageData(data, 3, 3, 16, false, new ImageMetaData()); var file = await sut.SaveToDisk(fileSaveInfo, default); File.Delete(file); var expectedPattern = $"#0001-01-01##0001-01-01_00-00-00#00-00-00#-0001##1x1#########{Utility.ApplicationStartDate.ToString("yyyy-MM-dd")}.tif"; Path.GetFileName(file).Should().Be($"{expectedPattern}"); }
private string SaveXisf(FileSaveInfo fileSaveInfo) { XISFHeader header = new XISFHeader(); header.AddImageMetaData(Properties, MetaData.Image.ImageType); header.Populate(MetaData); XISF img = new XISF(header); img.AddAttachedImage(Data.FlatArray, fileSaveInfo); Directory.CreateDirectory(Path.GetDirectoryName(fileSaveInfo.FilePath)); string uniquePath = Utility.Utility.GetUniqueFilePath(fileSaveInfo.FilePath + ".xisf"); using (FileStream fs = new FileStream(uniquePath, FileMode.Create)) { img.Save(fs); } return(uniquePath); }
public void AddAttachedImage(ushort[] data, FileSaveInfo fileSaveInfo) { if (Header.Image == null) { throw new InvalidOperationException("No Image Header Information available for attaching image. Add Image Header first!"); } // Add Attached data location info to header Data = new XISFData(data, fileSaveInfo); if (Data.ChecksumType != XISFChecksumTypeEnum.NONE) { Header.Image.Add(new XAttribute("checksum", $"{Data.ChecksumName}:{Data.Checksum}")); } int headerLengthBytes = 4; int reservedBytes = 4; int attachmentInfoMaxBytes = 256; // Assume max 256 bytes for the attachment, compression, and checksum attributes. int currentHeaderSize = Header.ByteCount + xisfSignature.Length + headerLengthBytes + reservedBytes + attachmentInfoMaxBytes; int dataBlockStart = currentHeaderSize + (PaddedBlockSize - currentHeaderSize % PaddedBlockSize); if (Data.CompressionType != XISFCompressionTypeEnum.NONE) { Header.Image.Add(new XAttribute("location", $"attachment:{dataBlockStart}:{Data.CompressedSize}")); if (Data.ByteShuffling == true) { Header.Image.Add(new XAttribute("compression", $"{Data.CompressionName}:{Data.Size}:{Data.ShuffleItemSize}")); } else { Header.Image.Add(new XAttribute("compression", $"{Data.CompressionName}:{Data.Size}")); } } else { Header.Image.Add(new XAttribute("location", $"attachment:{dataBlockStart}:{Data.Size}")); } }
private async Task <JObject> SubmitImage(string session, IImageData source, CancellationToken cancelToken) { string filePath = null; try { FileSaveInfo fileSaveInfo = new FileSaveInfo { FilePath = WORKING_DIRECTORY, FilePattern = Path.GetRandomFileName(), FileType = FileTypeEnum.FITS }; filePath = await source.SaveToDisk(fileSaveInfo, cancelToken, forceFileType : true); using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { return(await SubmitImageStream(fs, session, cancelToken)); } } finally { if (filePath != null && File.Exists(filePath)) { File.Delete(filePath); } } }
public async Task SaveToDiskXISFSimpleTest(NINA.Utility.Enum.FileTypeEnum fileType, string extension) { var data = new ushort[] { 3, 1, 1, 3, 4, 5, 3, 2, 3 }; var fileSaveInfo = new FileSaveInfo { FilePath = TestContext.CurrentContext.TestDirectory, FilePattern = "TestFile", FileType = fileType }; //var sut = await new ImageArrayExposureData(data, 3, 3, 16, false, new ImageMetaData()).ToImageData(); var sut = new ImageData(data, 3, 3, 16, false, MetaData); var file = await sut.SaveToDisk(fileSaveInfo, default); File.Exists(file).Should().BeTrue(); File.Delete(file); Path.GetFileName(file).Should().Be($"{fileSaveInfo.FilePattern}{extension}"); }
private string GetFilePath(FileSaveInfo fileInfo) { return "" + fileInfo.FileServer.startdirname + "/" + fileInfo.dirname + "/" + fileInfo.savefilename; }