Hallo Christoph,
vielen Dank für den Übersetzungslink.
Nun habe ich deinen Code mal ausprobiert. Soweit es die Geschwindigkeit betrifft ist er wirklich schnell.
Was ich aber festgestellt habe, ist folgendes:
Wenn ich meine Farbabweichung benutze, dann ist das Ergebnis mit Deiner Methode recht dürftig. Meine langsame Methode liefert mir mit nur 2-3 Durchläufen ein besseres Ergebnis.
Nicht das Du dies evtl. falsch verstehst. Die Geschwindigkeit ist echt super, nur halt das Ergebnis ist leider nicht so das ware.
Hier nun mal Code, den ich angepasst habe
Public Class Form3
Private Sub BildanzeigeNeu_MouseClick(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles BildanzeigeNeu.MouseClick
BildanzeigeNeu.Image = aSetTransparent(BildanzeigeNeu.Image)
End Sub
Private Sub BildanzeigeNeu_MouseMove(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles BildanzeigeNeu.MouseMove
Me.XMouse.Text = e.X
Me.YMouse.Text = e.Y
If Me.XMouse.Text > BildanzeigeNeu.Width Or Me.YMouse.Text > _
BildanzeigeNeu.Height Then Exit Sub
If IsNothing(BildanzeigeNeu.Image) Then Exit Sub
Dim myBitmap As New Bitmap(BildanzeigeNeu.Image)
On Error Resume Next
Dim pixelColor As Color = myBitmap.GetPixel(Val(Me.XMouse.Text), Val( _
Me.YMouse.Text))
AktuelleFarbeA.Text = pixelColor.A
AktuelleFarbeR.Text = pixelColor.R
AktuelleFarbeG.Text = pixelColor.G
AktuelleFarbeB.Text = pixelColor.B
Call BildanzeigeNeu.Refresh()
End Sub
Private Sub BildanzeigeNeu_Paint(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles BildanzeigeNeu.Paint
' Fadenkreuz zeichnen
Dim fk As Graphics = e.Graphics
Dim Ypoints As Point() = {New Point(0, Val(YMouse.Text)), New Point( _
Me.BildanzeigeNeu.Width, Val(Me.YMouse.Text))}
fk.DrawLines(Pens.Black, Ypoints)
Dim Xpoints As Point() = {New Point(Val(XMouse.Text), 0), New Point(Val( _
Me.XMouse.Text), Me.BildanzeigeNeu.Height)}
fk.DrawLines(Pens.Black, Xpoints)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
OpenFileDialog1.Filter = "JPG|*.jpg|Bitmap|*.bmp"
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
BildanzeigeNeu.Image = Image.FromFile(OpenFileDialog1.FileName)
End If
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button3.Click
BildanzeigeNeu.Image = SetTransparent(BildanzeigeNeu.Image)
End Sub
Private Function SetTransparent(ByVal vectorImage As Bitmap) As Bitmap
Dim Diff As Integer = Farbabweichung.Text
Dim A As Integer = AktuelleFarbeA.Text
Dim R As Integer = AktuelleFarbeR.Text
Dim G As Integer = AktuelleFarbeG.Text
Dim B As Integer = AktuelleFarbeB.Text
Dim RN As Integer
Dim GN As Integer
Dim BN As Integer
Dim z As Integer
For z = Diff * -1 To Diff
RN = R + z
GN = G + z
BN = B + z
If RN < 0 Then
RN = 0
End If
If RN > 255 Then
RN = 255
End If
If GN < 0 Then
GN = 0
End If
If GN > 255 Then
GN = 255
End If
If BN < 0 Then
BN = 0
End If
If BN > 255 Then
BN = 255
End If
'MsgBox(z & " RN " & RN & " GN " & GN & " BN " & BN)
vectorImage.MakeTransparent(Color.FromArgb(A, RN, GN, BN))
Next
Return vectorImage
End Function
End Class Wäre super, wenn Du mir meinen Fehler nennen könntest bzw. mir kurz den Unterschied zwischen den beiden Methoden erklären könntest.
Vielen Dank
Volker |