Exemple #1
0
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // METHODS //////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        /// <summary>
        ///     Generates the <see cref="BrightnessConfig"/> for a flatbed/feeder <paramref name="config"/>.
        /// </summary>
        internal static BrightnessConfig GenerateBrightnessConfig(IImageScannerSourceConfiguration config)
        {
            if (config.BrightnessStep == 0)
            {
                return(null);
            }

            BrightnessConfig result = new BrightnessConfig
            {
                MinBrightness     = config.MinBrightness,
                MaxBrightness     = config.MaxBrightness,
                BrightnessStep    = (int)config.BrightnessStep,
                DefaultBrightness = config.DefaultBrightness,
            };

            // determine virtual default brightness
            if (Math.Abs(Math.Abs(result.DefaultBrightness + result.BrightnessStep)
                         - Math.Abs(result.MaxBrightness))
                <=
                Math.Abs(Math.Abs(result.DefaultBrightness - result.BrightnessStep)
                         - Math.Abs(result.MinBrightness)))
            {
                result.VirtualDefaultBrightness = result.DefaultBrightness
                                                  - result.BrightnessStep;
            }
            else
            {
                result.VirtualDefaultBrightness = result.DefaultBrightness
                                                  + result.BrightnessStep;
            }

            return(result);
        }
Exemple #2
0
        /// <summary>
        ///     Generates the <see cref="ContrastConfig"/> for a flatbed/feeder <paramref name="config"/>.
        /// </summary>
        internal static ContrastConfig GenerateContrastConfig(IImageScannerSourceConfiguration config)
        {
            if (config.ContrastStep == 0)
            {
                return(null);
            }

            ContrastConfig result = new ContrastConfig
            {
                MinContrast     = config.MinContrast,
                MaxContrast     = config.MaxContrast,
                ContrastStep    = (int)config.ContrastStep,
                DefaultContrast = config.DefaultContrast,
            };

            // determine virtual default contrast
            if (Math.Abs(Math.Abs(result.DefaultContrast + result.ContrastStep)
                         - Math.Abs(result.MaxContrast))
                <=
                Math.Abs(Math.Abs(result.DefaultContrast - result.ContrastStep)
                         - Math.Abs(result.MinContrast)))
            {
                result.VirtualDefaultContrast = result.DefaultContrast
                                                - result.ContrastStep;
            }
            else
            {
                result.VirtualDefaultContrast = result.DefaultContrast
                                                + result.ContrastStep;
            }

            return(result);
        }
Exemple #3
0
        /// <summary>
        ///     Generates the true available resolution values for a flatbed/feeder configuration. Also enriches the resolution
        ///     values with the related <see cref="ResolutionAnnotation"/> and a friendly string.
        ///     Assumption: DpiX = DpiY
        /// </summary>
        /// <param name="config">The configuration for which resolution values are to be determined.</param>
        internal static ObservableCollection <ScanResolution> GenerateResolutions(IImageScannerSourceConfiguration config)
        {
            float currentValue = config.MinResolution.DpiX;
            float lastValue    = -1;
            ObservableCollection <ScanResolution> result = new ObservableCollection <ScanResolution>();
            int bestDocumentsResolution = -1, bestPhotosResolution = -1;

            while (currentValue <= config.MaxResolution.DpiX)
            {
                config.DesiredResolution = new ImageScannerResolution {
                    DpiX = currentValue, DpiY = currentValue
                };

                if (config.ActualResolution.DpiX != lastValue)
                {
                    ScanResolution newRes = new ScanResolution(config.ActualResolution.DpiX, ResolutionAnnotation.None);
                    result.Add(newRes);
                    lastValue = config.ActualResolution.DpiX;

                    // check how suitable these resolutions are for scanning documents and photos
                    if (bestDocumentsResolution == -1 ||
                        Math.Abs(ScanResolution.DocumentsResolution - newRes.Resolution.DpiX) < Math.Abs(ScanResolution.DocumentsResolution - result[bestDocumentsResolution].Resolution.DpiX))
                    {
                        bestDocumentsResolution = result.Count - 1;
                    }
                    if (bestPhotosResolution == -1 ||
                        Math.Abs(ScanResolution.PhotosResolution - newRes.Resolution.DpiX) < Math.Abs(ScanResolution.PhotosResolution - result[bestPhotosResolution].Resolution.DpiX))
                    {
                        bestPhotosResolution = result.Count - 1;
                    }
                }

                if (lastValue <= currentValue)
                {
                    currentValue += 1;
                }
                else
                {
                    currentValue = config.ActualResolution.DpiX + 1;
                }
            }

            if (result.Count == 0)
            {
                //log.Error("Generating resolutions for {@Config} failed.", config);
                throw new ApplicationException("Unable to generate any resolutions for given scanner.");
            }

            // determine the final properties
            if (bestDocumentsResolution == bestPhotosResolution)
            {
                result[bestDocumentsResolution] = new ScanResolution(result[bestDocumentsResolution].Resolution.DpiX, ResolutionAnnotation.Default);
            }
            else
            {
                result[bestDocumentsResolution] = new ScanResolution(result[bestDocumentsResolution].Resolution.DpiX, ResolutionAnnotation.Documents);
                result[bestPhotosResolution]    = new ScanResolution(result[bestPhotosResolution].Resolution.DpiX, ResolutionAnnotation.Photos);
            }

            return(result);
        }
Exemple #4
0
        private static void ConfigureScanner(
            ImageScanner scanner, ImageScannerScanSource source,
            Double hScanPercent, Double vScanPercent)
        {
            if (scanner == null)
            {
                throw new ArgumentNullException("scanner");
            }

            IImageScannerSourceConfiguration sourceConfig = null;
            IImageScannerFormatConfiguration formatConfig = null;

            switch (source)
            {
            case ImageScannerScanSource.Flatbed:
                sourceConfig = scanner.FlatbedConfiguration;
                formatConfig = scanner.FlatbedConfiguration;
                break;

            case ImageScannerScanSource.Feeder:
                sourceConfig = scanner.FeederConfiguration;
                formatConfig = scanner.FeederConfiguration;
                //Additional feeder-specific settings:
                //scanner.FeederConfiguration.CanScanDuplex
                //scanner.FeederConfiguration.Duplex
                //scanner.FeederConfiguration.CanScanAhead
                //scanner.FeederConfiguration.ScanAhead
                //scanner.FeederConfiguration.AutoDetectPageSize
                //scanner.FeederConfiguration.CanAutoDetectPageSize
                //scanner.FeederConfiguration.PageSize
                //scanner.FeederConfiguration.PageSizeDimensions
                //scanner.FeederConfiguration.PageOrientation
                break;

            case ImageScannerScanSource.AutoConfigured:
                formatConfig = scanner.AutoConfiguration;
                break;
            }

            // Potentially update the scanner configuration
            if (sourceConfig != null)
            {
                var maxScanArea = sourceConfig.MaxScanArea; // Size, with Width, Height in Inches    // MinScanArea
                sourceConfig.SelectedScanRegion = new Rect(
                    0,
                    0,
                    maxScanArea.Width * hScanPercent,
                    maxScanArea.Height * vScanPercent); // In inches
                // Additional Configuration settings
                // sourceConfig.AutoCroppingMode
                // sourceConfig.ColorMode ==     // DefaultColorMode
                // sourceConfig.Brightness   // DefaultBrightness    //MaxBrightness     // MinBrightness
                // sourceConfig.Contrast     // DefaultContrast      // MaxContrast      // MinContrast
                // sourceConfig.DesiredResolution = resolution;      // MaxResolution    // MinResolution
                // var actualResolution = sourceConfig.ActualResolution;
            }

            // Potentially update the format that the end product is saved to
            if (formatConfig != null)
            {
                Debug.WriteLine("Default format is {0}", formatConfig.DefaultFormat);

                // NOTE: If your desired format isn't natively supported, it may
                // be possible to generate the desired format post-process
                // using image conversion, etc. libraries.
                var desiredFormats = new[]
                {
                    ImageScannerFormat.Png,
                    ImageScannerFormat.Jpeg,
                    ImageScannerFormat.DeviceIndependentBitmap,
                    //ImageScannerFormat.Tiff,
                    //ImageScannerFormat.Xps,
                    //ImageScannerFormat.OpenXps,
                    //ImageScannerFormat.Pdf
                };

                foreach (var format in desiredFormats)
                {
                    if (formatConfig.IsFormatSupported(format))
                    {
                        formatConfig.Format = format;
                        break;
                    }
                }

                Debug.WriteLine("Configured format is {0}", formatConfig.Format);
            }
        }