private void SaveLastImage(string filePrefix, ImageSavingType savingType, int? errorCode) { Logger.LogVerbose(Message.RecognizerSaveImageCall, filePrefix, savingType); if (savingType == ImageSavingType.None) return; try { if (!ReserveSpaceForSaveLastBuffer(savingType)) return; Logger.LogVerbose(Message.RecognizerSavingImage); var savingStartTime = DateTime.Now; var filePathSb = GetImageFileName(filePrefix); var imageDirectoryPath = _fileSystemManager.GetDataDirectoryPath(FileType.ScanningImage); filePathSb.Insert(0, imageDirectoryPath + '/'); var filePath = filePathSb.ToString(); if (errorCode != null) filePathSb.Append("_E" + errorCode); if (savingType == ImageSavingType.Binary || savingType == ImageSavingType.All) { _scannerManager.SaveBuffer( filePath + "_B", ImageType.Binary, ScannedSide.Bottom, BufferSize.Scanned); } if (savingType == ImageSavingType.Halftone || savingType == ImageSavingType.All) { _scannerManager.SaveBuffer( filePath + "_H", ImageType.Halftone, ScannedSide.Bottom, BufferSize.Scanned); SystemHelper.SyncFileSystem(); } Logger.LogVerbose( Message.RecognizerSaveImageTiming, (DateTime.Now - savingStartTime).TotalMilliseconds); } catch (Exception ex) { Logger.LogWarning(Message.RecognizerSaveImageError, ex); _scannerManager.RestoreScanningAfterError(); } finally { Logger.LogVerbose(Message.Common_DebugReturn); } }
private bool ReserveSpaceForSaveLastBuffer(ImageSavingType savingType) { try { long requiredSize; switch (savingType) { case ImageSavingType.Binary: requiredSize = _scannerManager.GetBufferSize(ImageType.Binary, BufferSize.Scanned); break; case ImageSavingType.Halftone: requiredSize = _scannerManager.GetBufferSize(ImageType.Halftone, BufferSize.Scanned); break; case ImageSavingType.All: requiredSize = _scannerManager.GetBufferSize(ImageType.Binary, BufferSize.Scanned) + _scannerManager.GetBufferSize(ImageType.Halftone, BufferSize.Scanned); break; default: throw new Exception("Неизвестный тип сохранения изображения"); } if (!ReserveSpaceForImage(_config.MinFreeSpaceForImageKb.Value, requiredSize)) return false; } catch (Exception ex) { Logger.LogWarning(Message.RecognizerSaveImageError, ex); _scannerManager.RestoreScanningAfterError(); return false; } return true; }