Skip to content

Commit

Permalink
tilemode, nearestfilter
Browse files Browse the repository at this point in the history
Added a Tiledmode to use with tilesets / chipsets
added a simple nearestNeighbor filter
  • Loading branch information
Salmakis committed Jan 24, 2019
1 parent fad3f5a commit f069c85
Show file tree
Hide file tree
Showing 82 changed files with 828 additions and 90 deletions.
Binary file modified .vs/ImageFilter/v15/.suo
Binary file not shown.
Binary file modified .vs/ImageFilter/v15/Server/sqlite3/storage.ide
Binary file not shown.
Binary file modified .vs/ImageFilter/v15/Server/sqlite3/storage.ide-shm
Binary file not shown.
Binary file modified .vs/ImageFilter/v15/Server/sqlite3/storage.ide-wal
Binary file not shown.
Binary file added Docs/Screenshots/screenie.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
25 changes: 25 additions & 0 deletions FilterWrapper/FilterImage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,13 @@ public FilterImage(int width, int height)
this.Reset(width, height);
}

public void SetPixelArgb(int x, int y, int Argb) {
a[x * height + y] = (byte)((Argb & 0xff000000) >> 24);
r[x * height + y] = (byte)((Argb & 0x00ff0000) >> 16);
g[x * height + y] = (byte)((Argb & 0x0000ff00) >> 8);
b[x * height + y] = (byte)(Argb & 0x000000ff);
}

public void SetPixel(int x, int y, byte r, byte g, byte b, byte a)
{
if (x > width || x < 0 || y > height || y < 0)
Expand Down Expand Up @@ -105,5 +112,23 @@ public void SetPixel(int x, int y,Color color)
this.b[x * height + y] = color.B;
this.a[x * height + y] = color.A;
}

public FilterImage GrabSubImage(int x, int y, int w, int h) {
FilterImage subImage = new FilterImage(w, h);
for (int ix = 0; ix < w; ix++) {
for (int iy = 0; iy < h; iy++) {
subImage.SetPixelArgb(ix, iy, PixelArgb(ix + x, iy + y));
}
}
return subImage;
}

public void PutImage(int x, int y, FilterImage image) {
for (int ix = 0; ix < image.width; ix++) {
for (int iy = 0; iy < image.height; iy++) {
SetPixelArgb(ix + x, iy + y, image.PixelArgb(ix, iy));
}
}
}
}
}
51 changes: 51 additions & 0 deletions FilterWrapper/Filters/Simple/NearestN.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
using System.Collections.Generic;

namespace FilterWrapper.Filters.Simple
{
class NearestN : IImageFilter
{
List<Setting> settings = new List<Setting>();

SettingInteger scale = new SettingInteger("Scale", "Factor to scale", 2, 8, 2);

public NearestN() {
settings.Add(scale);
}

public IEnumerable<Setting> Settings
{
get {
return settings;
}
}

public string Info
{
get {
return "Simple NearestNeighbor";
}
}

public string Name
{
get {
return "NearestNeighbor";
}
}

public FilterImage Execute(FilterImage input) {
FilterImage newImage = new FilterImage(input.Width * scale.Value, input.Height * scale.Value);
for (int x = 0; x < input.Width; x++) {
for (int y = 0; y < input.Height; y++) {
int argb = input.PixelArgb(x, y);
for (int ix = 0; ix < scale.Value; ix++) {
for (int iy = 0; iy < scale.Value; iy++) {
newImage.SetPixelArgb(ix + x * scale.Value, iy + y * scale.Value, argb);
}
}
}
}
return newImage;
}
}
}
Binary file modified FilterWrapper/bin/Debug/netstandard2.0/FilterWrapper.dll
Binary file not shown.
Binary file modified FilterWrapper/bin/Debug/netstandard2.0/FilterWrapper.pdb
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6cea6cf4370041ae4f7ff6649fa35a667f711cb0
124a0c664ae08c6e24eb8f0b168c978604712569
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,11 @@ C:\Users\salma\OneDrive\Projekte\ImageFilter\FilterWrapper\obj\Debug\netstandard
C:\Users\salma\OneDrive\Projekte\ImageFilter\FilterWrapper\obj\Debug\netstandard2.0\FilterWrapper.dll
C:\Users\salma\OneDrive\Projekte\ImageFilter\FilterWrapper\obj\Debug\netstandard2.0\FilterWrapper.pdb
C:\Users\salma\OneDrive\Projekte\ImageFilter\FilterWrapper\obj\Debug\netstandard2.0\FilterWrapper.csprojResolveAssemblyReference.cache
C:\Github\ImageFilterCollection\FilterWrapper\bin\Debug\netstandard2.0\FilterWrapper.deps.json
C:\Github\ImageFilterCollection\FilterWrapper\bin\Debug\netstandard2.0\FilterWrapper.dll
C:\Github\ImageFilterCollection\FilterWrapper\bin\Debug\netstandard2.0\FilterWrapper.pdb
C:\Github\ImageFilterCollection\FilterWrapper\obj\Debug\netstandard2.0\FilterWrapper.csproj.CoreCompileInputs.cache
C:\Github\ImageFilterCollection\FilterWrapper\obj\Debug\netstandard2.0\FilterWrapper.AssemblyInfoInputs.cache
C:\Github\ImageFilterCollection\FilterWrapper\obj\Debug\netstandard2.0\FilterWrapper.AssemblyInfo.cs
C:\Github\ImageFilterCollection\FilterWrapper\obj\Debug\netstandard2.0\FilterWrapper.dll
C:\Github\ImageFilterCollection\FilterWrapper\obj\Debug\netstandard2.0\FilterWrapper.pdb
Binary file not shown.
Binary file modified FilterWrapper/obj/Debug/netstandard2.0/FilterWrapper.dll
Binary file not shown.
Binary file modified FilterWrapper/obj/Debug/netstandard2.0/FilterWrapper.pdb
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6cea6cf4370041ae4f7ff6649fa35a667f711cb0
124a0c664ae08c6e24eb8f0b168c978604712569
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ C:\Users\salma\OneDrive\Projekte\ImageFilter\FilterWrapper\obj\Release\netstanda
C:\Users\salma\OneDrive\Projekte\ImageFilter\Release\netstandard2.0\FilterWrapper.deps.json
C:\Users\salma\OneDrive\Projekte\ImageFilter\Release\netstandard2.0\FilterWrapper.dll
C:\Users\salma\OneDrive\Projekte\ImageFilter\Release\netstandard2.0\FilterWrapper.pdb
C:\Github\ImageFilterCollection\FilterWrapper\obj\Release\netstandard2.0\FilterWrapper.csprojResolveAssemblyReference.cache
C:\Github\ImageFilterCollection\FilterWrapper\obj\Release\netstandard2.0\FilterWrapper.csproj.CoreCompileInputs.cache
C:\Github\ImageFilterCollection\FilterWrapper\obj\Release\netstandard2.0\FilterWrapper.AssemblyInfoInputs.cache
C:\Github\ImageFilterCollection\FilterWrapper\obj\Release\netstandard2.0\FilterWrapper.AssemblyInfo.cs
C:\Github\ImageFilterCollection\FilterWrapper\obj\Release\netstandard2.0\FilterWrapper.dll
C:\Github\ImageFilterCollection\FilterWrapper\obj\Release\netstandard2.0\FilterWrapper.pdb
C:\Github\ImageFilterCollection\FilterWrapper\obj\Release\netstandard2.0\FilterWrapper.csprojResolveAssemblyReference.cache
Binary file modified FilterWrapper/obj/Release/netstandard2.0/FilterWrapper.dll
Binary file not shown.
Binary file modified FilterWrapper/obj/Release/netstandard2.0/FilterWrapper.pdb
Binary file not shown.
1 change: 1 addition & 0 deletions ImageFilter/ImageFilter.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="MainWindow.Tilemode.cs" />
<Compile Include="ClipboardHelper.cs" />
<Compile Include="FilterImageConvert.cs" />
<Compile Include="MainWindow.Core.cs" />
Expand Down
12 changes: 5 additions & 7 deletions ImageFilter/MainWindow.Core.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,30 +38,28 @@ private async Task ExecuteCurrentFilter()
return;
}

if ((((System.Windows.Controls.CheckBox)this.FindName("tileToggle")).IsChecked ?? false)) {
await ExecuteCurrentFilterTiled();
return;
}

converting = true;
//maybe display its settings again to see the up to date settings
DisplayCurrentFilterSettings();

Stopwatch watch = new Stopwatch();
watch.Start();
PushProgress("Executing the filter", 1);
//convert bitmap to filterImage and perform the filter
var convertTask = Task.Run(() => this.currentFilter.Execute(this.inputImage));
var outputFilterImage = await convertTask;
Console.WriteLine($"execute filter:{watch.ElapsedMilliseconds}");

watch.Restart();
//convert the result back to bitmap
PushProgress("Fetching result", 2);
var outputTask = Task.Run(() => FilterImageConvert.BitmapFromFilterImage(outputFilterImage));
var outputBitmap = await outputTask;
Console.WriteLine($"convert back to bmp:{watch.ElapsedMilliseconds}");

watch.Restart();
//apply the output bitmap guiwise
PushProgress("Rendering result", 3);
SetOutputImage(outputBitmap);
Console.WriteLine($"apply to gui:{watch.ElapsedMilliseconds}");

converting = false;
}
Expand Down
85 changes: 85 additions & 0 deletions ImageFilter/MainWindow.Tilemode.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@

using FilterWrapper;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace ImageFilter
{
public partial class MainWindow
{
//check if the tilesize give into textbox is valid integer
private void CheckTileSize(object sender, TextCompositionEventArgs e) {
Regex regex = new Regex("[^0-9]+");
if (regex.IsMatch(((TextBox)sender).Text)) {
((TextBox)sender).Text = "";
}
if (regex.IsMatch(e.Text)) {
e.Handled = true;
return;
}
}

private async Task ExecuteCurrentFilterTiled() {
int tileSizeY;
int tileSizeX;
if (!int.TryParse(((TextBox)this.FindName("tileYbox")).Text, out tileSizeY) || !int.TryParse(((TextBox)this.FindName("tileXbox")).Text, out tileSizeX)) {
MessageBox.Show("invalid tile dimensions");
return;
}
if (tileSizeX == 0 || tileSizeX > this.inputImage.Width || tileSizeY == 0 || tileSizeY > this.inputImage.Height) {
MessageBox.Show("Tiles should be at least 1 pixel (x & y) and not bigger than the input image");
return;
}

converting = true;
//maybe display its settings again to see the up to date settings
DisplayCurrentFilterSettings();

PushProgress("Creating target Image", 1);
//just run the converter with the first tile, to see how big the output tiles are
Task<FilterImage> testConvertTask = Task.Run(() => this.currentFilter.Execute(this.inputImage.GrabSubImage(0, 0, tileSizeX, tileSizeY)));
FilterImage testOutputFilterImage = await testConvertTask;

int scaleX = testOutputFilterImage.Width / tileSizeX;
int scaleY = testOutputFilterImage.Height / tileSizeY;
FilterImage outputImage = new FilterImage(this.inputImage.Width * scaleX, this.inputImage.Height * scaleY);

int offsetX;
int offsetY = 0;
int tilesProcessed = 1;
int tilesToProcess = (inputImage.Height / tileSizeY) * (inputImage.Width / tileSizeX);
while (offsetY <= inputImage.Height - tileSizeY) {
offsetX = 0;
while (offsetX <= inputImage.Width - tileSizeX) {
PushProgress($"converting tile: {tilesProcessed} / {tilesToProcess}", 2);
Task <FilterImage> convertTileTask = Task.Run(() => this.currentFilter.Execute(this.inputImage.GrabSubImage(offsetX, offsetY, tileSizeX, tileSizeY)));
FilterImage iOutputTile = await convertTileTask;
outputImage.PutImage(offsetX * scaleX, offsetY * scaleY, iOutputTile);
offsetX += tileSizeX;
tilesProcessed++;
}
offsetY += tileSizeY;
}

//convert the result back to bitmap
PushProgress("Fetching result", 3);
var outputTask = Task.Run(() => FilterImageConvert.BitmapFromFilterImage(outputImage));
var outputBitmap = await outputTask;

//apply the output bitmap guiwise
PushProgress("Rendering result", 3);
SetOutputImage(outputBitmap);

converting = false;

}
}
}
21 changes: 19 additions & 2 deletions ImageFilter/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,24 @@
</Grid>
</Border>
<Border Grid.Column="2" BorderThickness="2" BorderBrush="DarkGray">
<Button Content="Convert" Click="StartConvert"/>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="5"/>
<RowDefinition Height="18"/>
<RowDefinition Height="18"/>
<RowDefinition Height="50*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50*"/>
<ColumnDefinition Width="15"/>
<ColumnDefinition Width="50*"/>
</Grid.ColumnDefinitions>
<Button Content="Convert" Grid.Row="3" Grid.ColumnSpan="3" Click="StartConvert"/>
<CheckBox x:Name="tileToggle" Content="Tiledmode" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" ToggleButton.Unchecked="ToggleTilemode" ToggleButton.Checked="ToggleTilemode"/>
<TextBox x:Name="tileXbox" Grid.Row="2" Grid.Column="0" Text="16" IsEnabled="false" PreviewTextInput="CheckTileSize"/>
<Label Content="*" Grid.Column="1" Grid.Row="2"/>
<TextBox x:Name="tileYbox" Grid.Row="2" Grid.Column="2" Text="16" IsEnabled="false" PreviewTextInput="CheckTileSize"/>
</Grid>
</Border>
<Border Grid.Column="3" BorderThickness="2" BorderBrush="DarkGray">
<Grid >
Expand Down Expand Up @@ -122,7 +139,7 @@
<ProgressBar Grid.Row="1" Minimum="0" Maximum="4" Value="0" x:Name="ProgressBar" Background="#FF020202" BorderBrush="#FF4B4B4B" HorizontalAlignment="Center" Margin="10,40,10,38" Width="661"/>
<Label Content="a Moment please" x:Name="ProgressText" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" HorizontalContentAlignment="Center" FontSize="15" FontWeight="Bold" Foreground="#FF0CFF00"/>
</Grid>
</Border>
</Border>
</Grid>

</Window>
Expand Down
6 changes: 6 additions & 0 deletions ImageFilter/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@ public MainWindow() {
InitializeComponent();
}

private void ToggleTilemode(object sender, RoutedEventArgs e) {
CheckBox tileModeBox = (System.Windows.Controls.CheckBox)sender;
((System.Windows.Controls.TextBox)this.FindName("tileXbox")).IsEnabled = tileModeBox.IsChecked ?? false;
((System.Windows.Controls.TextBox)this.FindName("tileYbox")).IsEnabled = tileModeBox.IsChecked ?? false;
}

private void LoadFromFile(object sender, RoutedEventArgs e) {
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "PNG files (*.png)|*.png";
Expand Down
Binary file modified ImageFilter/bin/Debug/FilterWrapper.dll
Binary file not shown.
Binary file modified ImageFilter/bin/Debug/FilterWrapper.pdb
Binary file not shown.
4 changes: 2 additions & 2 deletions ImageFilter/bin/Debug/ImageFilter.application
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@
<framework targetVersion="4.6.1" profile="Full" supportedRuntime="4.0.30319" />
</compatibleFrameworks>
<dependency>
<dependentAssembly dependencyType="install" codebase="ImageFilter.exe.manifest" size="19989">
<dependentAssembly dependencyType="install" codebase="ImageFilter.exe.manifest" size="20481">
<assemblyIdentity name="ImageFilter.exe" version="1.0.0.1" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="msil" type="win32" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>OZJwp0vrs8vComDng4PG0K++9j2I6n+Bha6VqW/+UGU=</dsig:DigestValue>
<dsig:DigestValue>3IaoyLCd/4dfduOw4aMP4na4QDMSD3/qhqiCyumwI6A=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
Expand Down
Binary file modified ImageFilter/bin/Debug/ImageFilter.exe
Binary file not shown.
18 changes: 14 additions & 4 deletions ImageFilter/bin/Debug/ImageFilter.exe.manifest
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns="urn:schemas-microsoft-com:asm.v2" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2">
<asmv1:assemblyIdentity name="ImageFilter.exe" version="1.0.0.1" publicKeyToken="0000000000000000" language="neutral" processorArchitecture="msil" type="win32" />
<description asmv2:iconFile="Ressource\icon.ico" xmlns="urn:schemas-microsoft-com:asm.v1" />
<application />
<entryPoint>
<assemblyIdentity name="ImageFilter" version="1.0.0.0" language="neutral" processorArchitecture="msil" />
Expand Down Expand Up @@ -302,26 +303,26 @@
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="FilterWrapper.dll" size="242176">
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="FilterWrapper.dll" size="243200">
<assemblyIdentity name="FilterWrapper" version="1.0.0.0" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>xbmPPPOxDnGC8lK2qazkHAUx98NMV6TlgNAnBEVYdJo=</dsig:DigestValue>
<dsig:DigestValue>/zY5azxl04jW3FbWfYw3HbgukUSvwxSEVOzzrBgGBnQ=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="ImageFilter.exe" size="31232">
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="ImageFilter.exe" size="38400">
<assemblyIdentity name="ImageFilter" version="1.0.0.0" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>/b0/tsKK71JNj2uSL7eCSBNp1JQFVFy/bSDlfEwSOmc=</dsig:DigestValue>
<dsig:DigestValue>+TbvTEUzmQ1O7AtAKlNMXkF5m+1Zhnq4NfZ4zRtNXcg=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
Expand All @@ -334,4 +335,13 @@
<dsig:DigestValue>1Ehh3ZY8J9ocHo99HsPzSQJC/jl1Nk8tqMH7l98npqQ=</dsig:DigestValue>
</hash>
</file>
<file name="Ressource\icon.ico" size="1150">
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>U2s4d5UAiSKCJzc6ylFC3MvsQwbiamrsSa/+meXWkWU=</dsig:DigestValue>
</hash>
</file>
</asmv1:assembly>
Binary file modified ImageFilter/bin/Debug/ImageFilter.pdb
Binary file not shown.
Binary file modified ImageFilter/bin/Debug/app.publish/ImageFilter.exe
Binary file not shown.
Binary file not shown.
Loading

0 comments on commit f069c85

Please sign in to comment.