Scale bitmap

This commit is contained in:
Claudio Schaad 2020-11-29 15:20:37 +01:00
parent bd78a130ea
commit 74b4ad83e3
4 changed files with 97 additions and 11 deletions

View file

@ -0,0 +1,39 @@
using System;
using System.IO;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace LegoArt
{
public class ImageHelperService
{
public BitmapImage LoadToImage(System.Drawing.Bitmap bitmap)
{
using (var memory = new MemoryStream())
{
bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp);
memory.Position = 0;
var bitmapimage = new BitmapImage();
bitmapimage.BeginInit();
bitmapimage.StreamSource = memory;
bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
bitmapimage.EndInit();
return bitmapimage;
}
}
public BitmapImage LoadToImage(string path)
{
var bitmapimage = new BitmapImage();
bitmapimage.BeginInit();
bitmapimage.UriSource = new Uri(path);
bitmapimage.EndInit();
return bitmapimage;
}
public Color ConvertDrawingToWindowsMediaColor(System.Drawing.Color inputColor)
{
return Color.FromArgb(inputColor.A, inputColor.R, inputColor.G, inputColor.B);
}
}
}

View file

@ -5,22 +5,31 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:LegoArt"
mc:Ignorable="d"
Title="Lego Art Color Info" Height="500" Width="420">
Title="Lego Art Color Info" Height="500" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="20"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal" Height="25" VerticalAlignment="Top">
<Label Width="50" Content="Bild:"/>
<TextBox Width="300" x:Name="tbImagePath" />
<Button Width="50" Name="btnImageChooser" Content="..." Click="btnImageChooser_Click"/>
</StackPanel>
<StackPanel Grid.Row="2" Orientation="Vertical" Name="parentStackPanel" VerticalAlignment="Top">
</StackPanel>
<StackPanel Grid.Column="1" Grid.Row="2" Orientation="Vertical">
<Image HorizontalAlignment="Left" Grid.Row="2" VerticalAlignment="Top" Name="sourceImage" Stretch="None"/>
<Image HorizontalAlignment="Left" Grid.Row="2" VerticalAlignment="Top" Name="scaledImage" Stretch="None"/>
</StackPanel>
</Grid>
</Window>

View file

@ -13,9 +13,17 @@ namespace LegoArt
/// </summary>
public partial class MainWindow : Window
{
private readonly LegoArtColorService legoArtColorService;
private readonly BitmapHelperService bitmapHelperService;
private readonly ImageHelperService imageHelperService;
public MainWindow()
{
InitializeComponent();
legoArtColorService = new LegoArtColorService();
bitmapHelperService = new BitmapHelperService();
imageHelperService = new ImageHelperService();
}
private void btnImageChooser_Click(object sender, RoutedEventArgs e)
@ -30,10 +38,15 @@ namespace LegoArt
private void LoadImage(string path)
{
var legoArtColorService = new LegoArtColorService();
var legoArtColors = legoArtColorService.ParseImage(path);
if (legoArtColors != null)
{
var sourceBitamp = bitmapHelperService.ScaleImage(path, 1);
sourceImage.Source = imageHelperService.LoadToImage(sourceBitamp);
var scaledBitamp = bitmapHelperService.ScaleImage(path, 5);
scaledImage.Source = imageHelperService.LoadToImage(scaledBitamp);
parentStackPanel.Children.Clear();
AddLine(System.Drawing.Color.White, "Have", "Needed", "RGB", "#", "Difference", System.Drawing.Color.White);
@ -60,7 +73,7 @@ namespace LegoArt
private void AddLine(System.Drawing.Color color, string textHave, string textNeed, string textRgb, string textNumber, string textDifference, System.Drawing.Color statusColor)
{
var displayColor = ConvertDrawingToWindowsMediaColor(color);
var displayColor = imageHelperService.ConvertDrawingToWindowsMediaColor(color);
var rect = new Rectangle();
rect.Width = 20;
rect.Height = 20;
@ -96,7 +109,7 @@ namespace LegoArt
differenceTextBlock.TextAlignment = TextAlignment.Center;
differenceTextBlock.Text = textDifference;
var displayStatusColor = ConvertDrawingToWindowsMediaColor(statusColor);
var displayStatusColor = imageHelperService.ConvertDrawingToWindowsMediaColor(statusColor);
var status = new Rectangle();
status.Width = 20;
status.Height = 20;
@ -114,10 +127,5 @@ namespace LegoArt
stackPanel.Children.Add(status);
parentStackPanel.Children.Add(stackPanel);
}
private Color ConvertDrawingToWindowsMediaColor(System.Drawing.Color inputColor)
{
return Color.FromArgb(inputColor.A, inputColor.R, inputColor.G, inputColor.B);
}
}
}

View file

@ -0,0 +1,30 @@
using System.Drawing;
namespace LegoArtTool
{
public class BitmapHelperService
{
public Bitmap ScaleImage(string path, int scaleFactor)
{
var inputBitmap = new Bitmap(path);
var scaledBitmap = new Bitmap(inputBitmap.Width * scaleFactor, inputBitmap.Height * scaleFactor);
for (int x = 0; x < inputBitmap.Width; x++)
{
for (int y = 0; y < inputBitmap.Height; y++)
{
var sourcePixel = inputBitmap.GetPixel(x, y);
for (int scaleX = x * scaleFactor; scaleX < scaledBitmap.Width; scaleX++)
{
for (int scaleY = y * scaleFactor; scaleY < scaledBitmap.Height; scaleY++)
{
scaledBitmap.SetPixel(scaleX, scaleY, Color.FromArgb(sourcePixel.ToArgb()));
}
}
}
}
return scaledBitmap;
}
}
}