public ISearchAndReplaceService Create(MosaicTypeEnum type)
        {
            switch (type)
            {
            case MosaicTypeEnum.AdjustHue:
                return(_adjusthue());

            case MosaicTypeEnum.Classic:
                return(_classic());

            case MosaicTypeEnum.PlainColor:
                return(_plainColor());

            case MosaicTypeEnum.Random:
                return(_random());

            default:
                throw new InvalidOperationException();
            }
        }
Esempio n. 2
0
        public async Task <Result <Image <Rgba32> > > Generate(Size outputSize, Size tileSize, MosaicTypeEnum selectedMosaicType)
        {
            if (_masterImage == null)
            {
                var message = ResourceHelper.GetText("MosaicServiceErrorMasterImage");
                return(Result.Fail <Image <Rgba32> >(message));
            }

            if (selectedMosaicType != MosaicTypeEnum.PlainColor &&
                selectedMosaicType != MosaicTypeEnum.AsciiArt &&
                _tileImageList.Count < 1)
            {
                var message = ResourceHelper.GetText("MosaicServiceErrorTiles");
                return(Result.Fail <Image <Rgba32> >(message));
            }

            Image <Rgba32> resizedMasterImage = _masterImage.Clone(x => x.Resize(outputSize.Width, outputSize.Height));

            if (selectedMosaicType == MosaicTypeEnum.AsciiArt)
            {
                return(GenerateAsciiArt(outputSize, resizedMasterImage));
            }
            else
            {
                return(await GenerateMosaic(outputSize, resizedMasterImage, tileSize, selectedMosaicType));
            }
        }
Esempio n. 3
0
        private async Task <Result <Image <Rgba32> > > GenerateMosaic(Size outputSize, Image <Rgba32> resizedMasterImage, Size tileSize, MosaicTypeEnum selectedMosaicType)
        {
            _tileSize   = tileSize;
            _tX         = resizedMasterImage.Width / tileSize.Width;
            _tY         = resizedMasterImage.Height / tileSize.Height;
            _avgsMaster = new Rgba32[_tX, _tY];

            GetTilesAverage(resizedMasterImage);

            if (selectedMosaicType != MosaicTypeEnum.PlainColor)
            {
                await LoadTilesAndResize();
            }

            _searchAndReplaceService = _searchAndReplaceServiceFactory.Create(selectedMosaicType);
            _searchAndReplaceService.Init(_avgsMaster, outputSize, _tileImageList, tileSize, _tX, _tY);

            var finalImage = _searchAndReplaceService.SearchAndReplace();

            Dispose();

            return(Result.Ok(finalImage));
        }
Esempio n. 4
0
 public MosaicType(MosaicTypeEnum mosaicTypeEnum) => MosaicTypeEnum = mosaicTypeEnum;