Увеличьте и прокрутите изображение, нарисованное на 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 для рисования смайлика.