Resizing Images in VB.NET

前端 未结 6 1069
忘掉有多难
忘掉有多难 2020-12-15 23:40

I\'d like to make a simple VB utility to resize images using vb.net. I am having trouble figuring out what vb class to use to actually manipulate the images. The Image class

相关标签:
6条回答
  • 2020-12-16 00:00

    Don't know much VB.NET syntax but here's and idea

    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
    
    0 讨论(0)
  • 2020-12-16 00:03

    This will re-size any image using the best quality with support for 32bpp with alpha. The new image will have the original image centered inside the new one at the original aspect ratio.

    #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 讨论(0)
  • 2020-12-16 00:09

    Here is an article with full details on how to do this.

    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
    

    [Edit]
    One more on the similar lines.

    0 讨论(0)
  • 2020-12-16 00:10
        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
    
    0 讨论(0)
  • 2020-12-16 00:15

    This is basically Muhammad Saqib's answer except two diffs:

    1: Adds width and height function parameters.

    2: This is a small nuance which can be ignored... Saying 'As Bitmap', instead of 'As Image'. 'As Image' does work just fine. I just prefer to match Return types. See Image VS Bitmap Class.

    Public Shared Function ResizeImage(ByVal InputBitmap As Bitmap, width As Integer, height As Integer) As Bitmap
        Return New Bitmap(InputImage, New Size(width, height))
    End Function
    

    Ex.

    Dim someimage As New Bitmap("C:\somefile")
    someimage = ResizeImage(someimage,800,600)
    
    0 讨论(0)
  • 2020-12-16 00:26

    You can simply use this one line code to resize your image in visual basic .net

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

    Where;

    1. "InputImage" is the image you want to resize.
    2. "64 X 64" is the required size you may change it as your needs i.e 32X32 etc.
    0 讨论(0)
提交回复
热议问题