PageRenderTime 54ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/InstantImageUploader/Views/CaptureControl.xaml.cs

https://bitbucket.org/ugaya40/instant-image-uploader
C# | 85 lines | 71 code | 11 blank | 3 comment | 6 complexity | 709df487958014aead5eb7f3a3ccf59c MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Shapes;
  13. using System.Drawing;
  14. using System.Threading.Tasks;
  15. using InstantImageUploader.ViewModels;
  16. namespace InstantImageUploader.Views
  17. {
  18. /// <summary>
  19. /// CaptureWindow.xaml の相互作用ロジック
  20. /// </summary>
  21. public partial class CaptureControl : Window
  22. {
  23. public CaptureControl()
  24. {
  25. InitializeComponent();
  26. }
  27. private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  28. {
  29. var position = e.GetPosition(this);
  30. Canvas.SetLeft(target, position.X);
  31. Canvas.SetTop(target, position.Y);
  32. }
  33. private void Window_MouseMove(object sender, MouseEventArgs e)
  34. {
  35. if (e.LeftButton == MouseButtonState.Pressed)
  36. {
  37. var position = e.GetPosition(this);
  38. var width = position.X - Canvas.GetLeft(target);
  39. var height = position.Y - Canvas.GetTop(target);
  40. if (width > 0 && height > 0)
  41. {
  42. target.Width = width;
  43. target.Height = height;
  44. }
  45. }
  46. }
  47. private void Window_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  48. {
  49. if (target.Width < 10) return;
  50. if (target.Height < 10) return;
  51. target.Visibility = Visibility.Collapsed;
  52. Cursor = Cursors.Arrow;
  53. Task.Factory.StartNew(() =>
  54. {
  55. System.Threading.Thread.Sleep(500);
  56. Dispatcher.Invoke((Action)(() =>
  57. {
  58. using (var screenBmp = new Bitmap(
  59. (int)target.Width,
  60. (int)target.Height))
  61. {
  62. using (var bmpGraphics = Graphics.FromImage(screenBmp))
  63. {
  64. bmpGraphics.CopyFromScreen((int)Canvas.GetLeft(target)-5, (int)Canvas.GetTop(target)-5, 0, 0, screenBmp.Size);
  65. var tempFilePath = System.IO.Path.GetTempFileName();
  66. screenBmp.Save(tempFilePath, System.Drawing.Imaging.ImageFormat.Png);
  67. ((CaptureWindowViewModel)DataContext).SendImageCommand.Execute(tempFilePath);
  68. }
  69. }
  70. }), null);
  71. });
  72. }
  73. }
  74. }