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(); } }
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)); } }
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)); }
public MosaicType(MosaicTypeEnum mosaicTypeEnum) => MosaicTypeEnum = mosaicTypeEnum;