Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3
  1. #1
    Аватар для Fallen A.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Адрес
    Минск, БССР
    Сообщений
    236
    Репутация:
    19 ±

    Нарезка фото в реальном времени.

    Была задача, сделать ручную нарезку фото в форме с последующим отображением вырезанного куска в другом элементе.

    Изображение режется относительно его реальных размеров.

      Открыть/закрыть


    1. using System;
    2. using System.Drawing;
    3. using System.Drawing.Imaging;
    4. using System.Windows.Forms;
    5.  
    6. namespace PhotoEditResize
    7. {
    8. public partial class Form1 : Form
    9. {
    10. Image OriginalImg;
    11.  
    12. Rectangle CutRec = new Rectangle();
    13. Rectangle CutRec2 = new Rectangle();
    14.  
    15. bool DrRec = false;
    16.  
    17. public Form1()
    18. {
    19. InitializeComponent();
    20. }
    21. private void pictureBox1_Paint(object sender, PaintEventArgs e)
    22. {
    23. if (DrRec) { e.Graphics.DrawRectangle(Pens.Red, CutRec); }
    24. }
    25. private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    26. {
    27. if (e.Button == System.Windows.Forms.MouseButtons.Right)
    28. {
    29. int x = OriginalImg.Width * e.X / pictureBox1.Width;
    30. int y = OriginalImg.Height * e.Y / pictureBox1.Height;
    31.  
    32. CutRec.X = e.X;
    33. CutRec.Y = e.Y;
    34.  
    35. CutRec2.X = x;
    36. CutRec2.Y = y;
    37. }
    38. }
    39.  
    40. private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    41. {
    42. if (e.Button != System.Windows.Forms.MouseButtons.Right) { return; }
    43.  
    44. DrRec = true;
    45.  
    46. int x = OriginalImg.Width * e.X / pictureBox1.Width;
    47. int y = OriginalImg.Height * e.Y / pictureBox1.Height;
    48.  
    49. CutRec.Width = -CutRec.X + e.X;
    50. CutRec.Height = -CutRec.Y + e.Y;
    51.  
    52. pictureBox2.Invalidate();
    53. pictureBox1.Invalidate();
    54. }
    55.  
    56. private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    57. {
    58. if (!DrRec)
    59. return;
    60.  
    61. DrRec = false;
    62.  
    63. int x = OriginalImg.Width * e.X / pictureBox1.Width;
    64. int y = OriginalImg.Height * e.Y / pictureBox1.Height;
    65.  
    66. CutRec2.Width = x - CutRec2.X; // Ширина
    67. CutRec2.Height = y - CutRec2.Y; // Высота
    68.  
    69.  
    70. label5.Text = "Реальные координаты X " + x;
    71. label6.Text = "Реальные координаты Y " + y;
    72.  
    73.  
    74. pictureBox1.Refresh();
    75.  
    76.  
    77. if ((OriginalImg == null) || (CutRec2.X <= 0 || CutRec2.Y <= 0 || CutRec2.Width <= 0 || CutRec2.Height <= 0))
    78. return;
    79. try
    80. {
    81.  
    82. var pic = (Bitmap)pictureBox1.Image;
    83. pictureBox2.Image = pic.Clone(CutRec2, PixelFormat.Undefined);
    84. }
    85. catch
    86. {
    87. throw;
    88. }
    89.  
    90.  
    91.  
    92. }
    93.  
    94. private void button1_Click(object sender, EventArgs e)
    95. {
    96. OpenFileDialog ofd = new OpenFileDialog();
    97.  
    98. if (ofd.ShowDialog() == DialogResult.OK)
    99. {
    100. try { pictureBox1.Image = Image.FromFile(ofd.FileName); OriginalImg = pictureBox1.Image; }
    101. catch (Exception) { }
    102. }
    103.  
    104. pictureBox1.Invalidate();
    105. }
    106. }
    107. }


    Готовый проект: Ссылка на Яндекс.Диск

    P.S. Немного кода было своровано из всемирной сети. Линк уже и не вспомню.
    Последний раз редактировалось Fallen A.; 09.09.2019 в 23:01.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    А разве обрезанный вариант не получается где-то на треть уже изначальной выделенной области? Или это только на превью, а сам файл с вырезанной частью будет нормальным?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для Fallen A.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Адрес
    Минск, БССР
    Сообщений
    236
    Репутация:
    19 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А разве обрезанный вариант не получается где-то на треть уже изначальной выделенной области? Или это только на превью, а сам файл с вырезанной частью будет нормальным?
    Только на превью меньше, насколько я помню. Превью либо ужимает изображение, либо растягивает его.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •