public void TwainImageReceived(RecoveryIndexImage image, byte[] thumbnail, string tempImageFilePath) { var scannedImage = new ScannedImage(image); if (thumbnail != null) { scannedImage.SetThumbnail(new Bitmap(new MemoryStream(thumbnail))); } ImageCallback?.Invoke(scannedImage, tempImageFilePath); }
public async Task <int> Scan(ScanProfile scanProfile, ScanParams scanParams) { if (scanProfile.DriverName == ProxiedScanDriver.DRIVER_NAME) { scanProfile.DriverName = scanProfile.ProxyDriverName; } if (scanProfile.TwainImpl == TwainImpl.Legacy) { scanProfile.TwainImpl = TwainImpl.OldDsm; } scanProfile.UseNativeUi = false; var internalParams = new ScanParams { DetectPatchCodes = scanParams.DetectPatchCodes, NoUi = true, NoAutoSave = true, DoOcr = false, NoThumbnails = true, SkipPostProcessing = true }; var callback = OperationContext.Current.GetCallbackChannel <IScanCallback>(); var pages = 0; await scanPerformer.PerformScan(scanProfile, internalParams, null, null, image => { // TODO: Should stream this // TODO: Also should think about avoiding the intermediate filesystem using (image) { var indexImage = image.RecoveryIndexImage; var imageBytes = File.ReadAllBytes(image.RecoveryFilePath); var sanitizedIndexImage = new RecoveryIndexImage { FileName = Path.GetExtension(indexImage.FileName), TransformList = indexImage.TransformList, BitDepth = indexImage.BitDepth, HighQuality = indexImage.HighQuality }; callback.ImageReceived(imageBytes, sanitizedIndexImage); pages++; } }, cancellation.Token); return(pages); }
public ScannedImage(RecoveryIndexImage recoveryIndexImage) { recoveryImage = RecoveryImage.LoadExisting(recoveryIndexImage); transformList = recoveryImage.IndexImage.TransformList; }
public void ImageReceived(byte[] imageData, RecoveryIndexImage indexImage) { ImageCallback?.Invoke(imageData, indexImage); }