2010-01-27 4 views
10

Je voudrais faire un utilitaire VB simple pour redimensionner des images en utilisant vb.net. J'ai du mal à déterminer quelle classe vb utiliser pour manipuler les images. La classe Image et la classe Bitmap ne fonctionnent pas.Redimensionner des images dans VB.NET

Toutes les idées, astuces, astuces, tutoriels sont grandement appréciés.

Merci.

Répondre

13

Here is an article avec tous les détails sur la façon de procéder.

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 

[Modifier]
One more sur les lignes similaires.

2

Je ne sais pas la syntaxe beaucoup VB.NET mais voici et l'idée

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

Cela redimensionner une image à l'aide de la meilleure qualité avec prise en charge 32bpp avec alpha. La nouvelle image aura l'image originale centrée à l'intérieur du nouveau au format d'origine.

#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' ne s'applique pas ici, il est pertinent que pour le dessin vectoriel 2D méthodes telles que 'Graphics.DrawLine' – alldayremix

+0

Soyez prudent avec cela. La section 'Avec grDest' a semblé augmenter légèrement les valeurs alpha, seulement visible sur le traitement itératif de la même image avec un élément semi-opaque à l'image. Au fil du temps, cela est devenu de moins en moins opaque. J'ai commenté la partie .SmoothingMode et Changed CompositingMode à SourceCopy. Toujours en train de tester, mais l'un d'eux semble l'avoir fait. Peur je ne peux pas donner une réponse précise comme ne comprends pas bien GDI. Peut-être que @Carter pourrait être en mesure d'aider davantage étant donné sa connaissance du GDI. – stigzler

12

Vous pouvez simplement utiliser un code de ligne pour redimensionner votre image dans Visual Basic .net

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

Où;

  1. "InputImage" est l'image que vous souhaitez redimensionner.
  2. « 64 X 64 » est la taille requise, vous pouvez le modifier selon vos besoins à savoir 32X32 etc.
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 
Questions connexes