Нарисовать на элемент управления PictureBox или панель и масштаб изображения
Простите мне недостаток знаний, так как я только начинаю работать с Visual Basic.
Я пытаюсь нарисовать линии на picturebox и буду использовать трекбар для его масштабирования.
То, что у меня есть в коде ниже, нарисует то, что мне нужно, но, похоже, не сохранит исходное (немасштабированное) изображение в растровое изображение. Мне нужна трекбар в каждой точке, чтобы захватить исходное изображение и масштабировать его по значению trackbar.value. Мне нужно сделать это таким образом, чтобы он не искажал/не размывал изображение из-за слишком большого масштабирования одного и того же изображения.
Фоновое изображение используется по умолчанию,поэтому удаление этого изображения при рисовании линий.
Это код для рисования линий с помощью точек)
Imports System.Drawing.Drawing2D Imports System.Math Imports System.Drawing.Graphics Public Module DrawVaCrossframe Public Bmp As New Bitmap(609, 330) Public g As Graphics = FromImage(Bmp) Public Property rotateAngle As Double Public Sub drawVACF() CrossframesMain.pbVACFDraw.BackgroundImage = Nothing CrossframesMain.pbVACFDraw.BackColor = Color.Black CrossframesMain.pbVACFDraw.Refresh() g = CrossframesMain.pbVACFDraw.CreateGraphics 'Draw Centerline girders with drop WP's 1 thru 4 Dim pntWP1 As New Point 'left web/workline at bottom If dblGdrDrop >= 0.0 Then pntWP1 = New Point(CInt((sngPnlWidth) - (dblBayHalfWidth)), CInt((sngPnlHeight) - (dblWebHalfDepth))) Else pntWP1 = New Point(CInt((sngPnlWidth) - (dblBayHalfWidth)), CInt(CInt(sngPnlHeight) - (dblWebHalfDepth) - dblGdrDrop)) End If 'left web/workline at bottom Dim pntWp2 As New Point(pntWP1.X, pntWP1.Y + CInt(dblWebDepth)) 'right web/workline at top Dim pntWp3 As New Point(pntWP1.X + CInt(dblBayWidth), pntWP1.Y + CInt(dblGdrDrop)) 'right web/workline at bottom Dim pntWP4 As New Point(pntWp3.X, pntWp3.Y + CInt(dblWebDepth)) 'draw left workline g.DrawLine(whitePen, pntWP1, pntWp2) 'draw right workline g.DrawLine(whitePen, pntWp3, pntWP4)
Этот код получает мое изображение, но очень маленькое, поэтому мне нужно его масштабировать. Когда я пытаюсь отправить его на растровое изображение,
CrossframesMain.pbVACFDraw.Image = Bmp
после `G. drawline " изображение появляется на экране, а затем сразу же выключается.
Я вызываю drawVACF () из основной формы с помощью кнопки, а затем меняю трекбар на той же основной форме.
Imports System.Drawing.Drawing2D Public Class CrossframesMain Public g As Graphics Private Bmp As New Bitmap(1218, 660) Public Sub New() 'This call is required by the designer. InitializeComponent() 'Add any initialization after the InitializeComponent() call. tbarVACF.Minimum = 1 tbarVACF.Maximum = 9 tbarVACF.SmallChange = 1 tbarVACF.LargeChange = 2 tbarVACF.Value = 1 tbarVACF.TickFrequency = 2 tbarVACF.TickStyle = TickStyle.Both End Sub Private Sub tbarVACF_ValueChanged(sender As Object, e As EventArgs) Handles tbarVACF.ValueChanged Dim width As Integer Dim height As Integer Dim originalImage As Bitmap = CType(pbVACFDraw.Image, Bitmap) Dim g As Graphics = Graphics.FromImage(originalImage) Try If originalImage Is Nothing Then Return Else If Bmp Is Nothing Then Return Else lblTbarZoom.Text = "Zoom Level: " & tbarVACF.Value If tbarVACF.Value > 0 Then width = CInt(Bmp.Width * (0.25 * tbarVACF.Value)) height = CInt(Bmp.Height * (0.25 * tbarVACF.Value)) End If End If Dim _bmpImage = Bmp Dim scaledBitmap As New Bitmap(_bmpImage, width, height) Dim scaledBmp As Graphics = Graphics.FromImage(scaledBitmap) scaledBGBmp.InterpolationMode = InterpolationMode.HighQualityBicubic pbVACFDraw.Image = scaledBitmap g.DrawImage(scaledBitmap, width, height) End If Catch ex As Exception MsgBox(ex.ToString()) End Try End Sub
Я был бы очень признателен за любую помощь и руководство в этом вопросе.
Что я уже пробовал:
Трудно сказать, что все это я пробовал, потому что все это происходило вместе в течение последних двух недель, пытаясь узнать, что мне нужно делать. Я в полном уме.