Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace Reddit_Request_76_image_stiching_tool
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- }
- private void Window_Drop(object sender, DragEventArgs e)
- {
- if (e.Data.GetDataPresent(DataFormats.FileDrop))
- {
- string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
- var tmp = files.ToList();
- tmp.Sort();
- files = tmp.ToArray();
- var imgSize = GetSize(files);
- MakeImage(files, imgSize);
- }
- }
- private Tuple<int,int> GetSize(string[] files)
- {
- int width = 0;
- int height = 0;
- foreach (var filePath in files)
- {
- FileInfo file = new FileInfo(filePath);
- if (file.Extension.ToLower() == ".jpg" || file.Extension.ToLower() == ".jpeg" || file.Extension.ToLower() == ".png" || file.Extension.ToLower() == ".gif" || file.Extension.ToLower() == ".bmp")
- {
- try
- {
- var frame = BitmapFactory.FromStream(file.OpenRead());
- height += frame.PixelHeight;
- if (frame.PixelWidth > width)
- width = frame.PixelWidth;
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message, file.Name);
- }
- }
- }
- return new Tuple<int, int>(width, height);
- }
- private async void MakeImage(string[] files, Tuple<int, int> size)
- {
- int y = 0;
- WriteableBitmap writeableBmp = BitmapFactory.New(size.Item1, size.Item2);
- using (writeableBmp.GetBitmapContext())
- {
- foreach (var filePath in files)
- {
- FileInfo file = new FileInfo(filePath);
- if (file.Extension.ToLower() == ".jpg" || file.Extension.ToLower() == ".jpeg" || file.Extension.ToLower() == ".png" || file.Extension.ToLower() == ".gif" || file.Extension.ToLower() == ".bmp")
- {
- try
- {
- var frame = BitmapFactory.FromStream(file.OpenRead());
- Rect dest = new Rect((size.Item1*.5)-(frame.PixelWidth*.5), y, frame.PixelWidth, frame.PixelHeight);
- writeableBmp.Blit(dest, frame, new Rect(0, 0, frame.PixelWidth, frame.PixelHeight), WriteableBitmapExtensions.BlendMode.None);
- y += frame.PixelHeight;
- frame = null;
- this.Title = file.Name;
- await Task.Delay(10);
- GC.Collect();
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message, file.Name);
- }
- }
- }
- }
- this.Title = "Saving pngOut.png";
- await Task.Delay(10);
- using (var fs = File.Create("pngOut.png"))
- {
- var encoder = new PngBitmapEncoder();
- encoder.Frames.Add(BitmapFrame.Create(writeableBmp));
- encoder.Save(fs);
- }
- this.Title = "Done!";
- }
- }
- }
Add Comment
Please, Sign In to add comment