2016-04-15 11 views
0

Wie kann man den Zoomabstand eines Bildes in einer Bildbox einstellen?Bild in Bildbox zoomen

ich ein Bild aus einer Datei zu einem picturebox Laden, hier ist mein Code ...

Dim fs As FileStream 

OpenFileDialog1.Filter = "JPG files (*.jpg)|*.jpg|" & "BMP Files (*.bmp)|*.bmp|" _ 
    & "TIF Files (*.tif)|*.tif|" & "PNG Files (*.png)|*.png|" & "ALL Files (*.*)|*.*" 
OpenFileDialog1.Title = "Select an Image File" 
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then 
    currentfilename = OpenFileDialog1.FileName 
    If currentfilename.ToUpper.EndsWith(".JPG") Or _ 
    currentfilename.ToUpper.EndsWith(".BMP") Or _ 
    currentfilename.ToUpper.EndsWith(".TIF") Or _ 
    currentfilename.ToUpper.EndsWith(".PNG") Then 
     If Not (Pic.Image Is Nothing) Then 
      Pic.Image.Dispose() 
      Pic.Image = Nothing 
     End If 
     fs = New FileStream(currentfilename, IO.FileMode.Open, IO.FileAccess.Read) 
     Pic.Image = Image.FromStream(fs) 
     original = Pic.Image 
    End If 
End If 

Und dann bin ich Einstellung des Zoom-Abstandes mit diesem Code ...

If original Is Nothing Then 
    Exit Sub 
End If 
If Not converted Is Nothing Then 
    converted.Dispose() 
End If 
If Not zoomImage Is Nothing Then 
    zoomImage.Dispose() 
End If 

zoomImage = New Bitmap(original, _ 
      (Convert.ToInt64(original.Width * (ZoomValue)/100)), _ 
      (Convert.ToInt64(original.Height * (ZoomValue/100)))) 

converted = Graphics.FromImage(zoomImage) 

converted.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic 

Pic.Image = Nothing 
Pic.Image = zoomImage 

Ich habe keine Probleme mit diesem, wenn ich nur kleine Bilder verwende, aber es verwendet viel Speicher, wenn ich ein großes Bild habe, zum Beispiel ein Bild, das ich anzeige, ist eine 1,5 MB TIFF-Datei, die eine hat Größe von 33000 x 4000. Ich möchte nur Zoomstufen des Bildes einstellen, ich brauche nichts anderes wie das Zeichnen auf das Bild, eine Farbe ändern eines Pixels oder einer anderen Manipulation.

Antwort

0

Check out this answer, die Sie schlägt vor, könnte das Paint-Ereignis Ihres Panels/picturebox

Sie könnten es tun, wie so zu handhaben wollen:

Private Sub Pic_Paint(sender As Object, e As PaintEventArgs) Handles Pic.Paint 
    Dim newRect = New Rectangle(0, 0, _ 
     (Convert.ToInt64(original.Width * (ZoomValue/100))), _ 
     (Convert.ToInt64(original.Height * (ZoomValue/100)))) 
    e.Graphics.DrawImage(u, New Rectangle(0, 0, Pic.Width, Pic.Height), _ 
          newRect, GraphicsUnit.Pixel) 
End Sub