Guest User

Reddit_Request_76_image_stiching_tool

a guest
Sep 18th, 2018
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.05 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Windows;
  8. using System.Windows.Controls;
  9. using System.Windows.Data;
  10. using System.Windows.Documents;
  11. using System.Windows.Input;
  12. using System.Windows.Media;
  13. using System.Windows.Media.Imaging;
  14. using System.Windows.Navigation;
  15. using System.Windows.Shapes;
  16.  
  17. namespace Reddit_Request_76_image_stiching_tool
  18. {
  19.     /// <summary>
  20.     /// Interaction logic for MainWindow.xaml
  21.     /// </summary>
  22.     public partial class MainWindow : Window
  23.     {
  24.         public MainWindow()
  25.         {
  26.             InitializeComponent();
  27.         }
  28.  
  29.         private void Window_Drop(object sender, DragEventArgs e)
  30.         {
  31.             if (e.Data.GetDataPresent(DataFormats.FileDrop))
  32.             {
  33.                 string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
  34.                 var tmp = files.ToList();
  35.                 tmp.Sort();
  36.                 files = tmp.ToArray();
  37.  
  38.                 var imgSize = GetSize(files);
  39.                 MakeImage(files, imgSize);
  40.             }
  41.         }
  42.  
  43.         private Tuple<int,int> GetSize(string[] files)
  44.         {
  45.             int width = 0;
  46.             int height = 0;
  47.             foreach (var filePath in files)
  48.             {
  49.                 FileInfo file = new FileInfo(filePath);
  50.                 if (file.Extension.ToLower() == ".jpg" || file.Extension.ToLower() == ".jpeg" || file.Extension.ToLower() == ".png" || file.Extension.ToLower() == ".gif" || file.Extension.ToLower() == ".bmp")
  51.                 {
  52.                     try
  53.                     {
  54.                         var frame = BitmapFactory.FromStream(file.OpenRead());
  55.                         height += frame.PixelHeight;
  56.                         if (frame.PixelWidth > width)
  57.                             width = frame.PixelWidth;
  58.                     }
  59.                     catch (Exception ex)
  60.                     {
  61.                         MessageBox.Show(ex.Message, file.Name);
  62.                     }
  63.                 }
  64.             }
  65.             return new Tuple<int, int>(width, height);
  66.         }
  67.         private async void MakeImage(string[] files, Tuple<int, int> size)
  68.         {
  69.             int y = 0;
  70.             WriteableBitmap writeableBmp = BitmapFactory.New(size.Item1, size.Item2);
  71.             using (writeableBmp.GetBitmapContext())
  72.             {
  73.                 foreach (var filePath in files)
  74.                 {
  75.                     FileInfo file = new FileInfo(filePath);
  76.                     if (file.Extension.ToLower() == ".jpg" || file.Extension.ToLower() == ".jpeg" || file.Extension.ToLower() == ".png" || file.Extension.ToLower() == ".gif" || file.Extension.ToLower() == ".bmp")
  77.                     {
  78.                         try
  79.                         {
  80.                             var frame = BitmapFactory.FromStream(file.OpenRead());
  81.                             Rect dest = new Rect((size.Item1*.5)-(frame.PixelWidth*.5), y, frame.PixelWidth, frame.PixelHeight);
  82.                             writeableBmp.Blit(dest, frame, new Rect(0, 0, frame.PixelWidth, frame.PixelHeight), WriteableBitmapExtensions.BlendMode.None);
  83.  
  84.                             y += frame.PixelHeight;
  85.                             frame = null;
  86.                             this.Title = file.Name;
  87.                             await Task.Delay(10);
  88.                             GC.Collect();
  89.                         }
  90.                         catch (Exception ex)
  91.                         {
  92.                             MessageBox.Show(ex.Message, file.Name);
  93.                         }
  94.                     }
  95.                 }
  96.             }
  97.  
  98.             this.Title = "Saving pngOut.png";
  99.             await Task.Delay(10);
  100.             using (var fs = File.Create("pngOut.png"))
  101.             {
  102.                 var encoder = new PngBitmapEncoder();
  103.                 encoder.Frames.Add(BitmapFrame.Create(writeableBmp));
  104.                 encoder.Save(fs);
  105.             }
  106.             this.Title = "Done!";
  107.         }
  108.     }
  109. }
Add Comment
Please, Sign In to add comment