我有一个大小为187x16的图像,它连续包含10个较小的图像。
我想将这些图像分成10个不同的PictureBox。原始图片:Dim fr_bm As New Bitmap(Image.FromFile(…
您当前代码的主要问题是目标图像(包含图像的图像) 切片 原创),创作一次,但画了很多次。 由于原始图像具有透明像素,因此绘制的结果将是 积累 。 您可以看到透明部分重叠。
它可以很容易地纠正,为原始的每个切片创建一个新的位图。您也可以使用透明颜色重新绘制相同的图像,但速度更快。
在代码中,我正在组装将在一个数组中接收切片的所有PictureBox控件,因此您可以在创建位图的同一循环中分配Image。 你调用了第一个PictureBox 的 u1 强> ,所以我遵循相同的命名约定。
u1
位图也需要在创建时进行处理,并保留副本 的 unitsimagearray 强> 容器(如果你确实需要它)。 当您不再需要它们或应用程序关闭时,您将处置这些Bitmap。
unitsimagearray
的 原始位图( .GIF ) 强> :
.GIF
切片图像(2x)。保留了抗锯齿和透明度:
Private unitsimagearray(9) As Bitmap Dim imagePath As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "/images/u/image.gif") Dim picBoxes() As PictureBox = {u1, u2, u3, u4, u5, u6, u7, u8, u9, u10} Using sourceBitmap As Bitmap = DirectCast(Image.FromFile(imagePath).Clone(), Bitmap) For i As Integer = 0 To picBoxes.Length - 1 Using sliceBitmap As Bitmap = New Bitmap(16, 16, PixelFormat.Format32bppArgb) Using g As Graphics = Graphics.FromImage(sliceBitmap) Dim sourceRect As New Rectangle(i * 19, 0, 16, 16) Dim destinationRect As New Rectangle(0, 0, 16, 16) g.DrawImage(sourceBitmap, destinationRect, sourceRect, GraphicsUnit.Pixel) unitsimagearray(i) = DirectCast(sliceBitmap.Clone(), Bitmap) picBoxes(i).Image = unitsimagearray(i) End Using End Using Next End Using