Member 12658594 Ответов: 0

Нарисовать на элемент управления 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



Я был бы очень признателен за любую помощь и руководство в этом вопросе.

Что я уже пробовал:

Трудно сказать, что все это я пробовал, потому что все это происходило вместе в течение последних двух недель, пытаясь узнать, что мне нужно делать. Я в полном уме.

0 Ответов