Увеличьте и прокрутите изображение, нарисованное на C#
Эта программа позволяет масштабировать и прокручивать изображение, нарисованное программой. Программа содержит Panel с AutoScale, установленным в true. Внутри панели находится PictureBox с SizeMode, установленным в AutoSize. PictureBox содержит Bitmap, который отображает чертеж.
Основная идея проста. Когда пользователь выбирает масштаб, программа создает Bitmap нужного размера. Он делает объект Graphics для рисования на Bitmap и использует его метод ScaleTransform, чтобы сделать его подходящим масштабированием. Затем код вызывает метод рисования для создания чертежа. Метод рисования использует один и тот же код во всех масштабах, а вызов ScaleTransform делает масштаб результатов правильно.
Следующий код показывает метод SetScale, который готовит для рисования изображение.
// Установите масштаб и перерисовку.
private void SetScale(float picture_scale)
{
// Установите масштаб.
PictureScale = picture_scale;
// Создаем растровое изображение нужного размера.
Bm = new Bitmap(
(int)(PictureScale * WorldWidth),
(int)(PictureScale * WorldHeight));
// Создаем объект Graphics для Bitmap.
// (Если вам нужно использовать это позже, вы можете дать ему
// class scope, поэтому вам не нужно создавать новый.)
using (Graphics gr = Graphics.FromImage(Bm))
{
// Использовать белый фон
// (чтобы вы могли видеть, где находится изображение).
gr.Clear(Color.White);
// Рисуем плавно.
gr.SmoothingMode = SmoothingMode.AntiAlias;
// Масштаб.
gr.ScaleTransform(PictureScale, PictureScale);
// Нарисуем изображение.
DrawImage(gr);
}
// Отображение результата.
picCanvas.Image = Bm;
}
Этот код создает Bitmap правильный масштабный размер и связанный с ним объект Graphics. Он вызывает метод ScaleTransform объекта для масштабирования любого последующего чертежа, а затем вызывает метод DrawImage для рисования. Этот метод заканчивается отображением Bitmap в PictureBox программы.
В следующем коде показан метод DrawImage.
// Нарисуем изображение в мировых координатах.
private void DrawImage(Graphics gr)
{
Rectangle rect;
rect = new Rectangle(10, 10, 80, 80);
gr.FillEllipse(Brushes.LightGreen, rect);
gr.DrawEllipse(Pens.Green, rect);
rect = new Rectangle(40, 40, 20, 30);
gr.FillEllipse(Brushes.LightBlue, rect);
gr.DrawEllipse(Pens.Blue, rect);
rect = new Rectangle(25, 30, 50, 50);
gr.DrawArc(Pens.Red, rect, 20, 140);
rect = new Rectangle(25, 25, 15, 20);
gr.FillEllipse(Brushes.White, rect);
gr.DrawEllipse(Pens.Black, rect);
rect = new Rectangle(30, 30, 10, 10);
gr.FillEllipse(Brushes.Black, rect);
rect = new Rectangle(60, 25, 15, 20);
gr.FillEllipse(Brushes.White, rect);
gr.DrawEllipse(Pens.Black, rect);
rect = new Rectangle(65, 30, 10, 10);
gr.FillEllipse(Brushes.Black, rect);
}
Этот метод использует методы Graphics для рисования смайлика.
