VB.NET - 绘图放大图形出血

时间:2017-10-19 02:26:27

标签: vb.net

当我尝试在VB.NET中放大图像的一部分时,源矩形似乎已经过了。

    BMP1 = Bitmap.FromFile(Application.StartupPath & "\TST.png")

    Dim G As Graphics = PictureBox3.CreateGraphics
    G.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
    G.DrawImage(BMP1, New Point(0, 0))
    G.Dispose()

    G = PictureBox1.CreateGraphics
    G.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
    G.DrawImage(BMP1, New Rectangle(0, 0, 256, 256), 
                      New Rectangle(0, 32, 32, 32), GraphicsUnit.Pixel)
    G.Dispose()

    G = PictureBox2.CreateGraphics
    G.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
    G.DrawImage(BMP1, New Rectangle(0, 0, 256, 256), 
                      New Rectangle(0, 32, 31, 32), GraphicsUnit.Pixel)
    G.Dispose()

<小时/> VB.NET测试图像结果: VB.NET Test Image Results

如您所见,当放大到8倍时,图像会从相邻单元格中借用红色像素。当我尝试将源框调整1个像素时,放大的图像似乎丢失了两个像素而不是一个像素。

我的问题是,如何从VB6重现拉伸行为?

<小时/> VB6测试图像结果:

VB6 Test Image Results

1 个答案:

答案 0 :(得分:1)

原来答案是用RectangleFs而不是Rectangles调用DrawImage,然后从源矩形的X和Y值中减去0.5的幻数。这样可以完美地缩放图像。

G.DrawImage(BMP1, New RectangleF(0, 0, 256, 256), 
                  New RectangleF(-0.5, 31.5, 32, 32), GraphicsUnit.Pixel)