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
'Drawing2D.SmoothingMode' o 2D vektör çizim için alakalıdır, burada geçerli değildir Graphics.DrawLine' – alldayremix
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