使用Graphics.DrawImage结果调整图像大小不正确地调整图像

时间:2017-09-25 20:36:53

标签: vb.net

我想在中将图片调整为 4x4像素图片

使用互联网我得到了这段代码:

    Public Function ResizeImage(ByVal image As Image) As Image
    Try
        Dim newWidth = 4
        Dim newHeight = 4

        Dim newImage As New Bitmap(newWidth, newHeight)
        newImage.SetResolution(100, 100)

        Using graphicsHandle As Graphics = Graphics.FromImage(newImage)
            graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic
            graphicsHandle.DrawImage(image, 0, 0, newWidth, newHeight)
        End Using

        Return newImage

    Catch ex As Exception
        Return image
    End Try
End Function

原件:

image1

使用photoshop调整大小(调整大小的真正方法):

image2

使用InterpolationMode.Bilinear

image3

使用InterpolationMode.HighQualityBicubic

image4

有什么问题?

1 个答案:

答案 0 :(得分:0)

您需要的设置是双线性或双三次插值(避免使用“高质量”选项)和PixelOffsetMode.Half。

graphicsHandle.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear
graphicsHandle.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half

插值时,GDI +通常将像素的中心偏移半个像素。这在缩放时可能具有不期望的效果,具有向上和向左移动缩放图像的外观。使用PixelOffsetMode.Half将像素移回“属于”的位置。

高质量的双线性和双三次插值模式似乎将边缘像素与超出图像边界的假想透明像素混合,在边缘处创建半透明边缘。