2010-01-27 13 views
10

vb.net kullanarak görüntüleri yeniden boyutlandırmak için basit bir VB yardımcı programı yapmak istiyorum. Görüntülerin gerçekten manipüle edilmesinde ne tür bir sınıfın kullanılacağını bulmakta zorlanıyorum. Image sınıfı ve Bitmap sınıfı çalışmıyor.VB.NET'teki Resimlerin Boyutlandırılması

Herhangi bir fikir, ipucu, ipucu, öğretici linkler büyük beğeni topluyor.

Teşekkürler. Bunun nasıl yapılacağı ile ilgili tüm ayrıntılarla

cevap

13

Here is an article.

Private Sub btnScale_Click(ByVal sender As System.Object, _ 
    ByVal e As System.EventArgs) Handles btnScale.Click 
    ' Get the scale factor. 
    Dim scale_factor As Single = Single.Parse(txtScale.Text) 

    ' Get the source bitmap. 
    Dim bm_source As New Bitmap(picSource.Image) 

    ' Make a bitmap for the result. 
    Dim bm_dest As New Bitmap(_ 
     CInt(bm_source.Width * scale_factor), _ 
     CInt(bm_source.Height * scale_factor)) 

    ' Make a Graphics object for the result Bitmap. 
    Dim gr_dest As Graphics = Graphics.FromImage(bm_dest) 

    ' Copy the source image into the destination bitmap. 
    gr_dest.DrawImage(bm_source, 0, 0, _ 
     bm_dest.Width + 1, _ 
     bm_dest.Height + 1) 

    ' Display the result. 
    picDest.Image = bm_dest 
End Sub 

[Düzenleme] benzer çizgiler
One more.

2

çok VB.NET sözdizimi biliyorum ama buradaki ve fikri

Dim source As New Bitmap("C:\image.png") 
Dim target As New Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb) 

Using graphics As Graphics = Graphics.FromImage(target) 
    graphics.DrawImage(source, new Size(48, 48)) 
End Using 
4

Bu edecektir yeniden boy alfa ile 32bpp desteği ile en iyi kalite kullanarak herhangi bir resim var vermeyin. Yeni görüntü, orijinal görüntü oranına göre yeni görüntünün ortasındaki orijinal görüntüye sahip olacak.

#Region " ResizeImage " 
    Public Overloads Shared Function ResizeImage(SourceImage As Drawing.Image, TargetWidth As Int32, TargetHeight As Int32) As Drawing.Bitmap 
     Dim bmSource = New Drawing.Bitmap(SourceImage) 

     Return ResizeImage(bmSource, TargetWidth, TargetHeight) 
    End Function 

    Public Overloads Shared Function ResizeImage(bmSource As Drawing.Bitmap, TargetWidth As Int32, TargetHeight As Int32) As Drawing.Bitmap 
     Dim bmDest As New Drawing.Bitmap(TargetWidth, TargetHeight, Drawing.Imaging.PixelFormat.Format32bppArgb) 

     Dim nSourceAspectRatio = bmSource.Width/bmSource.Height 
     Dim nDestAspectRatio = bmDest.Width/bmDest.Height 

     Dim NewX = 0 
     Dim NewY = 0 
     Dim NewWidth = bmDest.Width 
     Dim NewHeight = bmDest.Height 

     If nDestAspectRatio = nSourceAspectRatio Then 
      'same ratio 
     ElseIf nDestAspectRatio > nSourceAspectRatio Then 
      'Source is taller 
      NewWidth = Convert.ToInt32(Math.Floor(nSourceAspectRatio * NewHeight)) 
      NewX = Convert.ToInt32(Math.Floor((bmDest.Width - NewWidth)/2)) 
     Else 
      'Source is wider 
      NewHeight = Convert.ToInt32(Math.Floor((1/nSourceAspectRatio) * NewWidth)) 
      NewY = Convert.ToInt32(Math.Floor((bmDest.Height - NewHeight)/2)) 
     End If 

     Using grDest = Drawing.Graphics.FromImage(bmDest) 
      With grDest 
       .CompositingQuality = Drawing.Drawing2D.CompositingQuality.HighQuality 
       .InterpolationMode = Drawing.Drawing2D.InterpolationMode.HighQualityBicubic 
       .PixelOffsetMode = Drawing.Drawing2D.PixelOffsetMode.HighQuality 
       .SmoothingMode = Drawing.Drawing2D.SmoothingMode.AntiAlias 
       .CompositingMode = Drawing.Drawing2D.CompositingMode.SourceOver 

       .DrawImage(bmSource, NewX, NewY, NewWidth, NewHeight) 
      End With 
     End Using 

     Return bmDest 
    End Function 
#End Region 
+0

'Drawing2D.SmoothingMode' o 2D vektör çizim için alakalıdır, burada geçerli değildir Graphics.DrawLine' – alldayremix

+0

gibi yöntemler buna dikkat edin. 'GrDest ile 'bölümü, görüntü için yarı opak bir elemanla aynı görüntünün yinelenen şekilde işlenmesiyle farkedilen alfa değerlerini sürekli olarak arttırdı. Zamanla, bu daha az ve daha az opak oldu. .SmoothingMode bölümünü ve CompositingMode'u SourceCopy'ye değiştirdim. Hala test ediliyor ama bu ikisinden biri yapmış gibi görünüyor. Korkarım GDI'yı iyi anlamadığı için doğru bir cevap veremem. Belki de @Carter GDI bilgisine sahip olarak daha fazla yardımcı olabilir. – stigzler

12

Sadece visual basic .net görüntüyü yeniden boyutlandırmak için bu bir hat kodu kullanabilirsiniz

Public Shared Function ResizeImage(ByVal InputImage As Image) As Image 
     Return New Bitmap(InputImage, New Size(64, 64)) 
End Function 

;

  1. "InputImage", yeniden boyutlandırmak istediğiniz görüntüdür.
  2. "64 X 64" ihtiyaçlarınızın vb 32x32 yani olarak gerekli boyut bunu değişebilir olduğunu
0
Dim x As Integer = 0 
    Dim y As Integer = 0 
    Dim k = 0 
    Dim l = 0 
    Dim bm As New Bitmap(p1.Image) 
    Dim om As New Bitmap(p1.Image.Width, p1.Image.Height) 
    Dim r, g, b As Byte 
    Do While x < bm.Width - 1 
     y = 0 
     l = 0 
     Do While y < bm.Height - 1 
      r = 255 - bm.GetPixel(x, y).R 
      g = 255 - bm.GetPixel(x, y).G 
      b = 255 - bm.GetPixel(x, y).B 
      om.SetPixel(k, l, Color.FromArgb(r, g, b)) 
      y += 3 
      l += 1 
     Loop 
     x += 3 
     k += 1 
    Loop 
    p2.Image = om