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