Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 12

Поворот выделенной области изображения

18.05.2017, 16:17. Показов 2320. Ответов 2

Студворк — интернет-сервис помощи студентам
У меня получилось сделать сам поворот изображения, получилось рисовать выделенную область такую, какую задаст пользователь, но проблема в том, что, честно говоря, не особо представляю как нужно выделенную область поворачивать! Именно выделенную пользователем область. В том ли направлении я вообще пошла, нужен ли тут такой полигон (я его делала просто для наглядности этой области), в общем, помогите пожалуйста. Возможно нужно делать копию выделенной области путем ее вырезания и вставлять на новый bitmap. Но я вообще не уверена в этом
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Laba4_Nastya
{
    public partial class Form1 : Form
    {
        private Bitmap bmp;
        private Graphics g;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //открытие файла 
            OpenFileDialog dialog = new OpenFileDialog();
            //задаем расширения файлов 
            dialog.Filter = "Image files (*.BMP, *.JPG, *.GIF, *.TIF, *.PNG, *.ICO, *.EMF, *.WMF)|*.bmp;*.jpg;*.gif; *.tif; *.png; *.ico; *.emf; *.wmf";
            if (dialog.ShowDialog() == DialogResult.OK)//вызываем диалоговое окно 
            {
                Image image = Image.FromFile(dialog.FileName); //Загружаем в image 
                //изображение из выбранного файла 
                int width = image.Width;
                int height = image.Height;
                pictureBox1.Width = width;
                pictureBox1.Height = height;
                bmp = new Bitmap(image, width, height); //создаем и загружаем из 
                //image изображение в формате bmp 
                pictureBox1.Image = bmp; //записываем изображение в формате bmp 
                //в pictureBox1 
                g = Graphics.FromImage(pictureBox1.Image); //подготавливаем объект 
                //Graphics для рисования в pictureBox1 
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            if (bmp != null)
            {
                if (rB1.Checked)
                {
                    Pen pen1 = new Pen(Color.Black);
                    int dx1 = Convert.ToInt16(tbX1.Text);
                    int dy1 = Convert.ToInt16(tbY1.Text);
                    int dx2 = Convert.ToInt16(tbX2.Text);
                    int dy2 = Convert.ToInt16(tbY2.Text);
                    int dx3 = Convert.ToInt16(tbX3.Text);
                    int dy3 = Convert.ToInt16(tbY3.Text);
                    int dx4 = Convert.ToInt16(tbX4.Text);
                    int dy4 = Convert.ToInt16(tbY4.Text);
                    Point p1 = new Point(dx1, dy1); 
                    Point p2 = new Point(dx2, dy2); 
                    Point p3 = new Point(dx3, dy3); 
                    Point p4 = new Point(dx4, dy4);
                    Point[] Points = { p1, p2, p3, p4 };
                    g.DrawPolygon(pen1, Points);
 
                    for (int i = 0; i < bmp.Height; i++)
                    {
                        bmp.RotateFlip(RotateFlipType.Rotate270FlipNone);
                        pictureBox1.Image = bmp;
                    }
                }
                if (rB2.Checked)
                {
                    bmp.RotateFlip(RotateFlipType.Rotate270FlipNone);
                    pictureBox1.Image = bmp;
                }
            }
            Refresh(); //вызываем функцию перерисовки окна 
        }
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2017, 16:17
Ответы с готовыми решениями:

Поворот выделенной области
//функция расчёта новых координат public Point rotate(Point point, double angle, Point center) { Point rotated_point = new...

Размытие выделенной области изображения
Не работает размытие blur выделенной области рисунка. Весь рисунок размывать не надо,только выделенную часть. После загрузки и выделения...

Увеличение Выделенной области
Как реализовать лупу на панели, т.е. что делать с прямоугольником или координатами которые мы получили протянув по панели зажатую левую...

2
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
18.05.2017, 20:35
Цитата Сообщение от Oblya Посмотреть сообщение
Поворот выделенной области изображения
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
 
namespace WindowsFormsApplication371
{
    public partial class Form1 : Form
    {
        Rectangle selectedArea;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void btOpen_Click(object sender, EventArgs e)
        {
            var dlg = new OpenFileDialog {Filter = "Image|*.png;*.jpg;*.bmp;*.jpeg"};
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                pbMain.Image = Bitmap.FromFile(dlg.FileName);
                ClearSelectedArea();
            }
        }
 
        Point startPoint;
        Point endPoint;
 
        void ClearSelectedArea()
        {
            startPoint = endPoint = Point.Empty;
            selectedArea = Rectangle.Empty;
            pbMain.Invalidate();
        }
 
        private void pbMain_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                endPoint = e.Location;
                pbMain.Invalidate();
            }
        }
 
        private void pbMain_MouseDown(object sender, MouseEventArgs e)
        {
            startPoint = endPoint = e.Location;
            pbMain.Invalidate();
        }
 
        private void pbMain_Paint(object sender, PaintEventArgs e)
        {
            var fromX = Math.Min(startPoint.X, endPoint.X);
            var toX = Math.Max(startPoint.X, endPoint.X);
            var fromY = Math.Min(startPoint.Y, endPoint.Y);
            var toY = Math.Max(startPoint.Y, endPoint.Y);
            selectedArea = Rectangle.FromLTRB(fromX, fromY, toX, toY);
 
            if (selectedArea.Width == 0 || selectedArea .Height == 0) return;
 
            var region = new Region(pbMain.ClientRectangle);
            region.Xor(selectedArea);
            using (var brush = new SolidBrush(Color.FromArgb(100, 0, 0, 0)))
                e.Graphics.FillRegion(brush, region);
        }
 
        void CutAndRotate(Bitmap bmp, Rectangle rect, int angle, bool clear = true)
        {
            var c = new Point(rect.Left + rect.Width/2, rect.Top + rect.Height/2);
 
            using (var temp = new Bitmap(bmp))
            using (var gr = Graphics.FromImage(bmp))
            {
                if(clear)
                    gr.FillRectangle(Brushes.White, rect);
 
                var m = new Matrix();
                m.RotateAt(angle, c);
                gr.Transform = m;
                gr.SetClip(rect);
                gr.DrawImage(temp, Point.Empty);
            }
        }
 
        private void btRotateCCW_Click(object sender, EventArgs e)
        {
            CutAndRotate((Bitmap)pbMain.Image, selectedArea, -90);
            ClearSelectedArea();
        }
 
        private void btRotateCW_Click(object sender, EventArgs e)
        {
            CutAndRotate((Bitmap)pbMain.Image, selectedArea, 90);
            ClearSelectedArea();
        }
    }
}
Вложения
Тип файла: zip WindowsFormsApplication371 (3).zip (70.9 Кб, 63 просмотров)
2
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 12
18.05.2017, 22:25  [ТС]
Storm23, большое спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.05.2017, 22:25
Помогаю со студенческими работами здесь

Перетаскивание WindowForm без заголовка в определенной выделенной области
Приветствую, возник вопрос с перетаскиванием формы. Суть такова: 1. У меня форма без заголовка т.е.: this.FormBorderStyle =...

поворот изображения
Вобщем нашёл рабочий код по повороту картинки на 90° влево :yahoo: клёва!)) Проблема в том, что я не могу понять как переделать функцию,...

Поворот изображения
понимаю, что тема уже заезжана, но все равно ничего путного не нашел. есть usercontrol, на нем рисуются изображения через .drawimage, можно...

Динамический поворот изображения
Почему не удаётся при движении, развернуть изображение в pictureBox на 180 градусов с отражением ??? private void...

Поворот изображения на форме
Как сделать чтобы при нажатии на кнопку изображение на форме(без использования pictureBox) поворачивалось на угол в 135 градусов?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru