возникла проблема с вращение изображения в pictureBox. У меня есть изображение и я вращаю его в форме (угол вращения задаю с помощью trackbara), хочу это вращение выполнить в pictureBox, но к сожалению все мои попытки тщетны, и изображение никак не хочет вращаться, подскажите как данное вращение сделать в PictureBox, буду очень благодарен
public Image img;
public int RotationAngle;
public Form1()
{
InitializeComponent();
this.DoubleBuffered = true; // убираем мерцание
}
private void Form1_Load(object sender, EventArgs e)
{
img = Image.FromFile(Application.StartupPath.ToString() + @"\image\Rocket.png");
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Bitmap bitmap = new Bitmap(img, img.Width, img.Height); // создаем новый битмап
e.Graphics.TranslateTransform(bitmap.Width * 5, bitmap.Height + 200 ); // перемещение в форме
e.Graphics.RotateTransform(Convert.ToInt32(RotationAngle/ 1.5)); // угол вращения
e.Graphics.TranslateTransform(-bitmap.Width / 2, -bitmap.Height - 200); // задаем точку вокруг которой осуществляется вращение
e.Graphics.DrawImage(bitmap, bitmap.Width/6,bitmap.Height/6); // проецируем изображение
}
private void Form1_Resize(object sender, EventArgs e)
{
Invalidate();
}
private void trackBar1_ValueChanged(object sender, EventArgs e)
{
RotationAngle = trackBar1.Value;
Invalidate();
}
Код выглядит следующим образом
private void Form1_Load(object sender, EventArgs e)
{
img = Image.FromFile(Application.StartupPath.ToString() + @"\image\Rocket.png");
// pictureBox1.BackgroundImage = Image.FromFile(Application.StartupPath.ToString() + @"\image\1.gif");
aTimer = new System.Timers.Timer(10);
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
public void OnTimedEvent(Object source, ElapsedEventArgs e)
{
Test();
}
public void Test()
{
Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height); // создаем новый битмап
this.Invoke(new Action(() => bitmap.SetResolution(img.HorizontalResolution, img.VerticalResolution)));
using (Graphics gfx = Graphics.FromImage(bitmap))
{
gfx.TranslateTransform(pictureBox1.Width / 2 , pictureBox1.Height/2 +400); // перемещение в picturebox
gfx.RotateTransform(Convert.ToInt32(RotationAngle / 1.5)); // угол вращения (Переменная RotationAngle)
gfx.TranslateTransform(-pictureBox1.Width / 2, -pictureBox1.Height/2 -600); // задаем точку вокруг которой осуществляется вращение
gfx.DrawImage(img, pictureBox1.Width/4, pictureBox1.Height/4); // проецируем изображение
}
pictureBox1.Image = bitmap;
}
так вот если я делаю
bitmap.Dispose;
то picturebox выглядит вот так
public void Test()
{
Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height); // создаем новый битмап
this.Invoke(new Action(() => bitmap.SetResolution(img.HorizontalResolution, img.VerticalResolution)));
using (Graphics gfx = Graphics.FromImage(bitmap))
{
gfx.TranslateTransform(pictureBox1.Width / 2 , pictureBox1.Height/2 +400); // перемещение в picturebox
gfx.RotateTransform(Convert.ToInt32(RotationAngle / 1.5)); // угол вращения (Переменная RotationAngle)
gfx.TranslateTransform(-pictureBox1.Width / 2, -pictureBox1.Height/2 -600); // задаем точку вокруг которой осуществляется вращение
gfx.DrawImage(img, pictureBox1.Width/4, pictureBox1.Height/4); // проецируем изображение
}
pictureBox1.Image = bitmap;
bitmap.Dispose();
}
Вот еще один пример кода
public void Rotate(object sender, PaintEventArgs e)
{
// e.Graphics.Clear(Color.Teal);
this.Invoke(new Action(() => pictureBox1.Refresh()));
Bitmap bitmap = new Bitmap(img, img.Width, img.Height); // создаем новый битмап
e.Graphics.TranslateTransform(bitmap.Width /2 , bitmap.Height + 200); // перемещение в picturebox
e.Graphics.RotateTransform(Convert.ToInt32(RotationAngle / 1.5)); // угол вращения (Переменная RotationAngle)
e.Graphics.TranslateTransform(-bitmap.Width/ 2, -bitmap.Height - 200); // задаем точку вокруг которой осуществляется вращение
e.Graphics.DrawImage(bitmap, bitmap.Width / 6, bitmap.Height / 6); // проецируем изображение
bitmap.Dispose();
}
Я же вам уже 100 раз сказал про наследование! Почему вы даже не попробовали наследоваться от класса PictureBox
?
Все делается буквально за минуту:
public sealed class RotatablePictureBox : PictureBox
{
private float _angle;
public RotatablePictureBox()
{
DoubleBuffered = true;
}
public float RotationAngle
{
get { return _angle; }
set
{
_angle = value;
Invalidate();
}
}
protected override void OnPaint(PaintEventArgs e)
{
if (Image is null)
{
base.OnPaint(e);
return;
}
e.Graphics.Clear(BackColor);
e.Graphics.TranslateTransform(Width / 2.0f, Height / 2.0f + 400);
e.Graphics.RotateTransform(RotationAngle / 1.5f);
e.Graphics.TranslateTransform(-Width / 2.0f, -Height / 2.0f - 600.0f);
e.Graphics.DrawImage(Image, Width / 4, Height / 4);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Создал dll - комментировал в ней все классы, методы и тд
Всем привет, создал приложение для авторизации пользователя по БД, но при запуске приложения на другом устройстве, не выходит БД, сейчас строка...
Есть кнопка и текстбокс, нужно что бы при нажатии на кнопку, начинался ввод в текстбоксКак это можно сделать? Не нашел нужной обработки события