Exemple #1
0
        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);
        }
Exemple #3
0
 public ScannedImage(RecoveryIndexImage recoveryIndexImage)
 {
     recoveryImage = RecoveryImage.LoadExisting(recoveryIndexImage);
     transformList = recoveryImage.IndexImage.TransformList;
 }
Exemple #4
0
 public void ImageReceived(byte[] imageData, RecoveryIndexImage indexImage)
 {
     ImageCallback?.Invoke(imageData, indexImage);
 }