Поворот изображения на произвольный градус - 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();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы