Erstmal Hallo ,
Ich habe vor ein Fernwartungsprogramm zu programmieren und möchte die Bildschirmübertragung optimieren, dafür habe ich mir gedacht damit ich nicht immer einn 1920x1080 Biltmap senden muss zerteile ich dieses in 100 Stücke also den Bildschirm in ein 10x10 Muster und überprüfe in jedem Teil ob sich etwas verändert hat wenn ja wird der neue Teil gesendet. So nun zu meinem Problem ich hatte davor meine sourcecode mit lauter einzelnen Pictureboxen, was natürlich sinnlos ist da man das Bild einfach wieder zusammenfügen kann. Meine Frage also wie zerteile ich ein 1920x1080 Bild in 100 Teile und füge diese später wieder zusammen? Danke schonmal im Vorraus für die Hilfe.
Den Sourcecode für 16 Teile habe ich berreits aber wie mache ich das mit 100 Teilen und füge das danach wieder zusammen?
Spoiler anzeigen
Ich habe vor ein Fernwartungsprogramm zu programmieren und möchte die Bildschirmübertragung optimieren, dafür habe ich mir gedacht damit ich nicht immer einn 1920x1080 Biltmap senden muss zerteile ich dieses in 100 Stücke also den Bildschirm in ein 10x10 Muster und überprüfe in jedem Teil ob sich etwas verändert hat wenn ja wird der neue Teil gesendet. So nun zu meinem Problem ich hatte davor meine sourcecode mit lauter einzelnen Pictureboxen, was natürlich sinnlos ist da man das Bild einfach wieder zusammenfügen kann. Meine Frage also wie zerteile ich ein 1920x1080 Bild in 100 Teile und füge diese später wieder zusammen? Danke schonmal im Vorraus für die Hilfe.
Den Sourcecode für 16 Teile habe ich berreits aber wie mache ich das mit 100 Teilen und füge das danach wieder zusammen?
VB.NET-Quellcode
- Public Function IsEqual(ByVal bmp1 As Bitmap, ByVal bmp2 As Bitmap) As Boolean
- Dim equal As Boolean = True
- If bmp1 Is Nothing Or bmp2 Is Nothing Then Return False
- If Bitmap.ReferenceEquals(bmp1, bmp2) Then Return True
- With bmp1
- If .Width <> bmp2.Width Then Return False
- If .Height <> bmp2.Height Then Return False
- If .PixelFormat <> bmp2.PixelFormat Then Return False
- End With
- Dim rect As New Rectangle(0, 0, bmp1.Width, bmp1.Height)
- Dim bd1 As BitmapData = bmp1.LockBits(rect, ImageLockMode.ReadOnly, bmp1.PixelFormat)
- Dim bd2 As BitmapData = bmp2.LockBits(rect, ImageLockMode.ReadOnly, bmp2.PixelFormat)
- Dim ByteZahl As Integer = bd1.Stride * bd1.Height
- Dim bmp1_bytes(ByteZahl - 1), bmp2_bytes(ByteZahl - 1) As Byte
- Marshal.Copy(bd1.Scan0, bmp1_bytes, 0, ByteZahl)
- Marshal.Copy(bd2.Scan0, bmp2_bytes, 0, ByteZahl)
- For i As Integer = 0 To ByteZahl - 1
- If bmp1_bytes(i) <> bmp2_bytes(i) Then
- equal = False : Exit For
- End If
- Next i
- bmp1.UnlockBits(bd1) : bmp2.UnlockBits(bd2)
- Return equal
- End Function
- Dim Bild(15) As Image
- Dim bmp(15) As Bitmap
- Dim sSize As Size
- Dim g As Graphics
- Dim img As Image
- Public Sub bilderstellen(ByVal screennumber As Integer)
- Dim Bitmap As Bitmap
- Dim oScreens() As Screen = Screen.AllScreens
- Dim nScreenCount As Integer = oScreens.Length
- For i As Integer = 0 To nScreenCount - 1
- If i = screennumber Then
- Dim Rect As Rectangle = oScreens(i).Bounds
- Using Bmp2 As Bitmap = New Bitmap(Rect.Width, Rect.Height)
- Using Gra As Graphics = Graphics.FromImage(Bmp2)
- Gra.CopyFromScreen(0, 0, 0, 0, Bmp2.Size)
- End Using
- Bitmap = New Bitmap(Bmp2, 1024, 768)
- Bmp2.Dispose()
- End Using
- End If
- Next i
- img = Bitmap
- sSize = New Size(img.Width / 4, img.Height / 4)
- For i As Integer = 0 To 3
- erstellen(i, 0, i)
- Next
- For i As Integer = 4 To 7
- erstellen(i, 1, i - 4)
- Next
- For i As Integer = 8 To 11
- erstellen(i, 2, i - 8)
- Next
- For i As Integer = 12 To 15
- erstellen(i, 3, i - 12)
- Next
- End Sub
- Public Sub erstellen(ByVal i As Integer, ByVal multiplikator As Integer, ByVal widthmultiplikator As Integer)
- bmp(i) = New Bitmap(sSize.Width, sSize.Height)
- g = Graphics.FromImage(bmp(i))
- g.DrawImage(img, New RectangleF(0, 0, sSize.Width, _
- sSize.Height), _
- New RectangleF((widthmultiplikator) * sSize.Width, multiplikator * _
- sSize.Height, sSize.Width, sSize.Height), _
- GraphicsUnit.Pixel)
- If Bild(i) Is Nothing Then
- Bild(i) = bmp(i)
- Else
- If IsEqual(Bild(i), bmp(i)) = True Then
- Else
- sendimage(i, bmp(i))
- Bild(i).Dispose()
- Bild(i) = bmp(i)
- End If
- End If
- End Sub