1

我正在尝试从 .NET 中的 PictureBox 复制图像并将其绘制在另一个图像之上。当我在初始图像上绘制图像时,如何在图片框中保留图像的 sizemode 属性?

提前致谢...

编辑:这是我用来将图片从图片框(pbImage)绘制到另一个图片框(pbContainer)的图像上的代码。我将 SizeMode 设置为缩放 pbImage。我遇到的问题是尝试使用与 pbImage 中相同的外观来绘制图像,并且想知道是否有一种方法可以找出图像的大小,因为它使用 SizeMode = Zoom 而不是如何显示在图片框中原始图像的大小。

Private Function FlattenImage() As Bitmap
    Dim bmp As New Bitmap(pbContainer.Image, pbContainer.Size)
    Using insertImage As New Bitmap(pbImage.Image, pbImage.Width, pbImage.Height), g As Graphics = Graphics.FromImage(bmp)
        Dim insertLocation As New Point(pbImage.Left - pbContainer.Left, pbImage.Top - pbContainer.Top)
        g.DrawImage(insertImage, insertLocation)
        Return bmp
    End Using
End Function

我最终只是像这样使用 DrawToBitmap() :

Private Function FlattenImage() As Bitmap
    Dim bmp As New Bitmap(pbContainer.Image, pbContainer.Size)
    Using insertImage As New Bitmap(pbImage.Width, pbImage.Height), g As Graphics = Graphics.FromImage(bmp)
        Dim insertLocation As New Point(pbImage.Left - pbContainer.Left, pbImage.Top - pbContainer.Top)
        Dim rect As New Rectangle(New Point(0, 0), pbImage.Size)
        pbImage.DrawToBitmap(insertImage, rect)
        g.DrawImage(insertImage, insertLocation)
        Return bmp
    End Using
End Function

它可以按我的需要工作。但是我仍然想知道是否有一种方法可以使用各种 SizeModes 来获取图像在 PictureBox 中显示的大小,因为它在未来可能会有用。

谢谢。

4

1 回答 1

0

例如,将 PictureBox1.BackColor 设置为透明,而不是:

Dim x As New Bitmap(PictureBox1.Width, PictureBox1.Height)
PictureBox1.DrawToBitmap(x, PictureBox1.DisplayRectangle)

之后,通过使用循环,您可以从左、右、上和下计算区域。例如:

If Not (x.GetPixel(i, j) = Color.Transparent) Then
EdgeFound(i,j)
End If
于 2012-08-13T22:47:37.290 回答