Skip to content

Commit

Permalink
Merge pull request #17 from emiliano84/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
Emiliano84 authored Jul 8, 2020
2 parents 185eb13 + d325450 commit b59ae99
Show file tree
Hide file tree
Showing 15 changed files with 215 additions and 74 deletions.
1 change: 1 addition & 0 deletions Yugen.Mosaic.Uwp.sln
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Azure", "Azure", "{E44DE1EE-E0B3-4250-8CBE-F9B13C6DF19A}"
ProjectSection(SolutionItems) = preProject
build-pipelines.yml = build-pipelines.yml
GitVersion.yml = GitVersion.yml
EndProjectSection
EndProject
Global
Expand Down
3 changes: 3 additions & 0 deletions Yugen.Mosaic.Uwp/Enums/FileFormat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ public enum FileFormat
[Description(".jpg")]
Jpg,

[Description(".jpeg")]
Jpeg,

[Description(".png")]
Png,

Expand Down
1 change: 1 addition & 0 deletions Yugen.Mosaic.Uwp/Interfaces/IMosaicService.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using System;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.Streams;
Expand Down
4 changes: 2 additions & 2 deletions Yugen.Mosaic.Uwp/Package.appxmanifest
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,15 @@
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png"
Description="Yugen.Mosaic.Uwp"
BackgroundColor="#C93535">
BackgroundColor="transparent">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" ShortName="Yugen Mosaic" Square71x71Logo="Assets\SmallTile.png" Square310x310Logo="Assets\LargeTile.png">
<uap:ShowNameOnTiles>
<uap:ShowOn Tile="square150x150Logo"/>
<uap:ShowOn Tile="square310x310Logo"/>
<uap:ShowOn Tile="wide310x150Logo"/>
</uap:ShowNameOnTiles>
</uap:DefaultTile >
<uap:SplashScreen Image="Assets\SplashScreen.png" BackgroundColor="#C93535"/>
<uap:SplashScreen Image="Assets\SplashScreen.png" BackgroundColor="transparent"/>
</uap:VisualElements>
</Application>
</Applications>
Expand Down
12 changes: 10 additions & 2 deletions Yugen.Mosaic.Uwp/Services/AdjustHueSearchAndReplaceService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,17 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Yugen.Mosaic.Uwp.Helpers;
using Yugen.Mosaic.Uwp.Models;
using Yugen.Mosaic.Uwp.ViewModels;

namespace Yugen.Mosaic.Uwp.Services
{
public class AdjustHueSearchAndReplaceService : SearchAndReplaceService
{
public AdjustHueSearchAndReplaceService(Image<Rgba32> outputImage, Size tileSize, int tX, int tY, List<Tile> tileImageList, Rgba32[,] avgsMaster) : base(outputImage, tileSize, tX, tY, tileImageList, avgsMaster)
public AdjustHueSearchAndReplaceService(Image<Rgba32> outputImage, Size tileSize,
int tX, int tY, List<Tile> tileImageList, Rgba32[,] avgsMaster)
: base(outputImage, tileSize, tX, tY, tileImageList, avgsMaster)
{
}

Expand All @@ -22,6 +26,10 @@ public override void SearchAndReplace()
var seq = Enumerable.Range(0, _tX * _tY).Select(x => x % _tileImageList.Count);
var tileShuffledList = seq.OrderBy(a => r.Next());

ProgressService.Instance.Reset();

int max = _tX * _tY;

Parallel.For(0, _tX * _tY, xy =>
{
var y = xy / _tX;
Expand All @@ -41,7 +49,7 @@ public override void SearchAndReplace()
// Apply found tile to section
ApplyTileFound(x, y, adjustedImage);
//_progress++;
ProgressService.Instance.IncrementProgress(max, 66, 100);
});
}

Expand Down
11 changes: 9 additions & 2 deletions Yugen.Mosaic.Uwp/Services/ClassicSearchAndReplaceService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,24 @@
using System.Threading.Tasks;
using Yugen.Mosaic.Uwp.Helpers;
using Yugen.Mosaic.Uwp.Models;
using Yugen.Mosaic.Uwp.ViewModels;

namespace Yugen.Mosaic.Uwp.Services
{
public class ClassicSearchAndReplaceService : SearchAndReplaceService
{
public ClassicSearchAndReplaceService(Image<Rgba32> outputImage, Size tileSize, int tX, int tY, List<Tile> tileImageList, Rgba32[,] avgsMaster) : base(outputImage, tileSize, tX, tY, tileImageList, avgsMaster)
public ClassicSearchAndReplaceService(Image<Rgba32> outputImage, Size tileSize,
int tX, int tY, List<Tile> tileImageList, Rgba32[,] avgsMaster)
: base(outputImage, tileSize, tX, tY, tileImageList, avgsMaster)
{
}

public override void SearchAndReplace()
{
ProgressService.Instance.Reset();

int max = _tX * _tY;

Parallel.For(0, _tX * _tY, xy =>
{
int y = xy / _tX;
Expand Down Expand Up @@ -46,7 +53,7 @@ public override void SearchAndReplace()
// Apply found tile to section
ApplyTileFound(x, y, tileFound.ResizedImage);
//_progress++;
ProgressService.Instance.IncrementProgress(max, 66, 100);
});
}
}
Expand Down
23 changes: 12 additions & 11 deletions Yugen.Mosaic.Uwp/Services/MosaicService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,18 @@
using Yugen.Mosaic.Uwp.Helpers;
using Yugen.Mosaic.Uwp.Interfaces;
using Yugen.Mosaic.Uwp.Models;
using Yugen.Mosaic.Uwp.ViewModels;

namespace Yugen.Mosaic.Uwp.Services
{
public class MosaicService : IMosaicService
{
internal Rgba32[,] _avgsMaster;
internal int _progress;
internal int _tX;
internal int _tY;
internal List<Tile> _tileImageList = new List<Tile>();

private Image<Rgba32> _masterImage;
private int _progressMax;
private Size _tileSize;

public async Task<Size> AddMasterImage(StorageFile file)
Expand Down Expand Up @@ -112,28 +111,30 @@ private void GetTilesAverage(Image<Rgba32> masterImage)
{
_avgsMaster[x, y].FromRgba32(ColorHelper.GetAverageColor(masterImage, x, y, _tileSize));
}
ProgressService.Instance.IncrementProgress(_tY, 0, 33);
});
}

private async Task LoadTilesAndResize()
{
_progressMax = _tileImageList.Count;
_progress = 0;
ProgressService.Instance.Reset();

var processTiles = _tileImageList.AsParallel().Select(tile => ProcessTile(tile));

var processTiles = _tileImageList.Select(ProcessTile).ToArray();
await Task.WhenAll(processTiles);

_progress++;
}

private async Task ProcessTile(Tile tile) =>
await tile.Process(_tileSize);
private async Task ProcessTile(Tile tile)
{
await tile.Process(_tileSize);

ProgressService.Instance.IncrementProgress(_tileImageList.Count, 33, 66);
}

private Image<Rgba32> SearchAndReplace(Size tileSize, MosaicTypeEnum selectedMosaicType, Size outputSize)
{
var outputImage = new Image<Rgba32>(outputSize.Width, outputSize.Height);
_progressMax = _tileImageList.Count;
_progress = 0;

ISearchAndReplaceService SearchAndReplaceService;

Expand Down
13 changes: 11 additions & 2 deletions Yugen.Mosaic.Uwp/Services/PlainColorSearchAndReplaceService.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,31 @@
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using System;
using System.Collections.Generic;
using System.Numerics;
using System.Threading.Tasks;
using Yugen.Mosaic.Uwp.Helpers;
using Yugen.Mosaic.Uwp.Models;
using Yugen.Mosaic.Uwp.ViewModels;

namespace Yugen.Mosaic.Uwp.Services
{
public class PlainColorSearchAndReplaceService : SearchAndReplaceService
{
public PlainColorSearchAndReplaceService(Image<Rgba32> outputImage, Size tileSize, int tX, int tY, List<Tile> tileImageList, Rgba32[,] avgsMaster) : base(outputImage, tileSize, tX, tY, tileImageList, avgsMaster)
public PlainColorSearchAndReplaceService(Image<Rgba32> outputImage, Size tileSize,
int tX, int tY, List<Tile> tileImageList, Rgba32[,] avgsMaster)
: base(outputImage, tileSize, tX, tY, tileImageList, avgsMaster)
{
}

// Use just mosic colored tiles
public override void SearchAndReplace()
{
ProgressService.Instance.Reset();

int max = _tX * _tY;

Parallel.For(0, _tX * _tY, xy =>
{
int y = xy / _tX;
Expand All @@ -37,7 +46,7 @@ public override void SearchAndReplace()
// Apply found tile to section
ApplyTileFound(x, y, adjustedImage);
//_progress++;
ProgressService.Instance.IncrementProgress(max, 66, 100);
});
}
}
Expand Down
32 changes: 32 additions & 0 deletions Yugen.Mosaic.Uwp/Services/ProgressService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using System;

namespace Yugen.Mosaic.Uwp.ViewModels
{
public class ProgressService
{
private IProgress<int> _progress;
private int current;

public static ProgressService Instance { get; } = new ProgressService();

public void Init(Action<int> progress)
{
// The Progress<T> constructor captures our UI context,
// so the lambda will be run on the UI thread.
_progress = new Progress<int>(progress);
current = 0;
}

public void Reset()
{
current = 0;
}

public void IncrementProgress(int total, int startPercentage = 0, int maxPercentage = 100)
{
var currentPercentage = current * (maxPercentage - startPercentage ) / total;
++current;
_progress.Report(startPercentage + currentPercentage);
}
}
}
11 changes: 9 additions & 2 deletions Yugen.Mosaic.Uwp/Services/RandomSearchAndReplaceService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@
using System.Threading.Tasks;
using Yugen.Mosaic.Uwp.Helpers;
using Yugen.Mosaic.Uwp.Models;
using Yugen.Mosaic.Uwp.ViewModels;

namespace Yugen.Mosaic.Uwp.Services
{
public class RandomSearchAndReplaceService : SearchAndReplaceService
{
public RandomSearchAndReplaceService(Image<Rgba32> outputImage, Size tileSize, int tX, int tY, List<Tile> tileImageList, Rgba32[,] avgsMaster) : base(outputImage, tileSize, tX, tY, tileImageList, avgsMaster)
public RandomSearchAndReplaceService(Image<Rgba32> outputImage, Size tileSize, int tX, int tY,
List<Tile> tileImageList, Rgba32[,] avgsMaster)
: base(outputImage, tileSize, tX, tY, tileImageList, avgsMaster)
{
}

Expand All @@ -19,6 +22,10 @@ public override void SearchAndReplace()
{
var r = new Random();

ProgressService.Instance.Reset();

int max = _tX * _tY;

Parallel.For(0, _tX * _tY, xy =>
{
var y = xy / _tX;
Expand Down Expand Up @@ -51,7 +58,7 @@ public override void SearchAndReplace()
// Apply found tile to section
ApplyTileFound(x, y, tileFound.ResizedImage);
//_progress++;
ProgressService.Instance.IncrementProgress(max, 66, 100);
});
}
}
Expand Down
12 changes: 12 additions & 0 deletions Yugen.Mosaic.Uwp/Strings/en-US/Resources.resw
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,21 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="DefaultDeletePicture" xml:space="preserve">
<value>Do you want to Remove this picture?</value>
</data>
<data name="DefaultNo" xml:space="preserve">
<value>No</value>
</data>
<data name="DefaultYes" xml:space="preserve">
<value>Yes</value>
</data>
<data name="MainAddMasterTextBlock.Text" xml:space="preserve">
<value>Click here to choose a Master image</value>
</data>
<data name="MainAddTilesFolderTextBlock.Text" xml:space="preserve">
<value>Add Tiles from Folder</value>
</data>
<data name="MainAddTilesTextBlock.Text" xml:space="preserve">
<value>Add Tiles</value>
</data>
Expand Down
Loading

0 comments on commit b59ae99

Please sign in to comment.