2016-04-15 2 views
0

Каковы некоторые способы регулировки расстояния масштабирования изображения в кадре?Масштабирование изображения в картинке

Я загрузка изображения из файла в PictureBox, вот мой код ...

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 

И тогда я буду регулировки расстояния трансфокатора, используя этот код ...

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 

У меня нет возможности с этим, если я просто использую небольшие изображения, но он использует много памяти, если у меня есть большое изображение, например, одно изображение, которое я показываю, представляет собой файл TIFF размером 1,5 МБ, который имеет размер 33000 x 4000. Я хочу только отрегулировать уровни масштабирования изображения, мне больше не нужно рисовать изображение, меняя цвет пикселя или любых других манипуляций.

ответ

0

Заканчивать this answer который предлагает вам может понадобиться обработать событие Paint из панели/PictureBox

Вы можете сделать это следующим образом:

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