public SlicePicker(IFilter grayscaleFilter, IInPlaceFilter edgeDetectionFilter, SliceRatingCalculator ratingCalculator, ThumbnailGeneratorUtilities thumbnailGeneratorUtilities)
 {
     this.grayscaleFilter             = grayscaleFilter;
     this.edgeDetectionFilter         = edgeDetectionFilter;
     this.ratingCalculator            = ratingCalculator;
     this.thumbnailGeneratorUtilities = thumbnailGeneratorUtilities;
 }
示例#2
0
        public void GenerateThumbnails(ThumbnailGenerationParameters parameters)
        {
            var textureConverterFactory = new TextureConverterFactory();

            using (var textureConverter = textureConverterFactory.Create()) {
                IFilter               grayscaleFilter     = new Grayscale(0.3, 0.59, 0.11);
                IInPlaceFilter        edgeDetectionFilter = new HomogenityEdgeDetector();
                SliceRatingCalculator ratingCalculator    = new SliceRatingCalculator();
                var utilities    = new ThumbnailGeneratorUtilities(textureConverter);
                var slicePicker  = new SlicePicker(grayscaleFilter, edgeDetectionFilter, ratingCalculator, utilities);
                var aspectRatio  = 16 / (double)9;
                var sliceCount   = 5;
                var resultWidth  = 400;
                var resultHeight = (int)(resultWidth / aspectRatio);
                var sliceWidth   = resultWidth / sliceCount;

                var bitmaps = utilities.EnumerateBitmapsRandomly(parameters.SourceDirectory).Take(100).ToList();

                var slices        = slicePicker.PickSlices(bitmaps, new Size(sliceWidth, resultHeight));
                var sliceCombiner = new SliceCombiner(utilities, grayscaleFilter);
                for (var i = 0; i < parameters.ThumbnailsToGenerate; i++)
                {
                    var bitmap = sliceCombiner.CombineSlices(slices, kSlicesPerThumbnail);
                    using (var ms = new MemoryStream()) {
                        bitmap.Save(ms, ImageFormat.Jpeg);
                        ms.Position = 0;
                        var hash       = MD5.Create().ComputeHash(ms).ToHex();
                        var outputName = hash + "_" + DateTime.UtcNow.GetUnixTime().ToString() + ".jpg";
                        var outputPath = Path.Combine(parameters.DestinationDirectory, outputName);
                        ms.Position = 0;
                        using (var fs = File.OpenWrite(outputPath)) {
                            ms.CopyTo(fs);
                        }
                    }
                }
            }
        }