Imports System.Drawing.Drawing2D
Imports System.Runtime.InteropServices
Public Class Form1
<DllImport("kernel32.dll", EntryPoint:="RtlMoveMemory", CharSet:=CharSet.Auto, SetLastError:=True, ExactSpelling:=True)> _
Public Shared Sub CopyMemory(ByVal DestData As Integer(,), ByVal SrcData As IntPtr, ByVal Size As Integer)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim BMP As Bitmap = My.Resources.doorx2
PictureBox3.Region = GetRegion(BMP)
End Sub
Function GetRegion(ByVal Bmp As Bitmap) As System.Drawing.Region
Dim BmpArr(Bmp.Width - 1, Bmp.Height - 1) As Integer
Dim BmpRect As Rectangle = Rectangle.Round(Bmp.GetBounds(GraphicsUnit.Pixel))
Dim Reg As New Region(BmpRect)
If Bmp.PixelFormat <> Imaging.PixelFormat.Format32bppArgb Then Return Reg
Dim BData As Imaging.BitmapData
BData = BMP.LockBits(BmpRect, Imaging.ImageLockMode.ReadOnly, BMP.PixelFormat)
Dim Ptr As IntPtr = BData.Scan0
Bmp.UnlockBits(BData)
CopyMemory(BmpArr, Ptr, BmpArr.Length * 4)
Dim Rect As New Rectangle(0, 0, 1, 1)
Dim RowEnd = BmpArr.GetUpperBound(0)
Dim ColEnd = BmpArr.GetUpperBound(1)
For Row As Integer = 0 To RowEnd
For Col As Integer = 0 To ColEnd
If BmpArr(Row, Col) >> 24 = 0 Then
Rect.X = Col : Rect.Y = Row
Reg.Exclude(Rect)
End If
Next
Next
Return Reg
End Function
End Class
программист писал(а):Суть моей идеи: считать в BackgroundImage Pic2 часть Pic1, которую заслоняет Pic2 !?
Это реально ??? И если реально то как ???
В первой строке функции, там где обьявляется массив, поменяй местами ширину и высоту.В алгоритме где-то ошибка
pictureBox1.Controls.Add(pictureBox2);
((Bitmap)(pictureBox2.Image)).MakeTransparent(Color.White);
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2