Поворот изображения на произвольный градус - C#
Формулировка задачи:
Привет всем) Возникла странная проблема. При повороте изображения на произвольный градус оно обрезается с каждым шагом поворота, много что пробовал, но что-то не могу разобраться
Вот код поворота:
Для наглядности добавлю результат:
До:
После:
private void SetAngleBtn_Click(object sender, EventArgs e) { var newBitmap = new Bitmap(MainImageBox.Image.Width, MainImageBox.Image.Height); var graphics = Graphics.FromImage(newBitmap); graphics.TranslateTransform((float)MainImageBox.Image.Width / 2, (float)MainImageBox.Image.Height / 2); graphics.RotateTransform((float)SetCustomAngle.Value); graphics.TranslateTransform(-(float)MainImageBox.Image.Width / 2, -(float)MainImageBox.Image.Height / 2); graphics.DrawImage(MainImageBox.Image, new Point(0, 0)); MainImageBox.Image = newBitmap; }
Решение задачи: «Поворот изображения на произвольный градус»
textual
Листинг программы
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace RotateImage { public partial class MainForm : Form { private Image Img = null; private float Ang = 0; public MainForm() { InitializeComponent(); } private void buttonOpen_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.ShowDialog(); try { Img = Image.FromFile(ofd.FileName); Invalidate(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } protected override void OnPaint(PaintEventArgs e) { if (Img == null) { return; } e.Graphics.TranslateTransform(Img.Width / 2, Img.Height / 2); e.Graphics.RotateTransform(Ang); e.Graphics.DrawImage(Img, new Point(-Img.Width / 2, -Img.Height / 2)); } private void numericUpDownAng_ValueChanged(object sender, EventArgs e) { Ang = (float)numericUpDownAng.Value; Invalidate(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д