| |
VB.NET - Ein- und Umsteigerzufällige Farben | | | Autor: Caddy | Datum: 08.07.12 19:13 |
| Hallo
ich brauche ca. 200 verschiedene Farben. Bisher habe ich in einer Funktion 200 Zufallsfarben in einer List( of Color) gespeichert. vor dem Abspeichern prüfe ich ob diese Farbe in der Liste schon vorhanden ist. Falls nein, speicher ich sie erst in der Liste. Das alles klappt, doch kommt es trotzdem vor, dass verschiedene Farben sich sehr ähneln. Ich sage dazu, dass ich die Farbnuancen aus den RGB-Beriechen zusammen setze.
Nun 2 Fragen: Wie krieg ich das hin, das diese Farbnuancen deutlicher zu unterscheiden sind?
und wie kann ich die Liste speichern, so dass ich am Anfagn des Programmes die Farben wieder abrufen kann und nicht bei jedem Auruf neue Farben habe? Speichern jeden Wert in DB oder in einer Datei oder in der Registry oder..?
Gruss Caddy | |
Re: zufällige Farben | | | Autor: Manfred X | Datum: 09.07.12 15:06 |
| Hallo!
Probier mal sowas.
Das Testen der Klasse habe ich Dir überlassen.
Public Class RandomColors
Dim _coltab As New DataTable
Dim _mindiff As Integer
Dim _rndm As New Random
''' <summary>Erstellung einer Liste mit Zufallsfarben </summary>
''' <param name="Count">Anzahl der Farben (1-300)</param>
''' <param name="MinDiff">Mindestdifferenz, RGB gewichtet (0-30)</param>
Public Sub New(ByVal Count As Integer, ByVal MinDiff As Integer)
If Count < 1 Then Throw New Exception("Keine Farbe angefordert")
If Count > 300 Then Throw New Exception("Zu viele Farben")
If MinDiff < 0 Or MinDiff > 30 Then Throw New Exception("Ungültige" & _
"Schranke")
_coltab.TableName = "RandomColors"
_coltab.Columns.Add("Red", GetType(Byte))
_coltab.Columns.Add("Green", GetType(Byte))
_coltab.Columns.Add("Blue", GetType(Byte))
_mindiff = MinDiff
Dim counter As Integer, newcolor As Color
For i As Integer = 0 To Count - 1
_coltab.Rows.Add({0, 0, 0}) : counter = 0
Do
newcolor = RandomColor()
counter += 1
If counter > 500 Then
Throw New Exception("Ungeeignete Parameter")
End If
Loop While Not CheckColor(newcolor)
_coltab.Rows(i)("Red") = newcolor.R
_coltab.Rows(i)("Green") = newcolor.G
_coltab.Rows(i)("Blue") = newcolor.B
Next i
End Sub
''' <summary>Abfrage einer Farbe </summary>
''' <param name="index">Index der Liste</param>
Public ReadOnly Property GetColor(ByVal index As Integer) As Color
Get
Return Color.FromArgb(CInt(_coltab(index)("Red")), _
CInt(_coltab(index)("Green")), _
CInt(_coltab(index)("Blue")))
End Get
End Property
''' <summary> Anzahl der Farben </summary>
Public ReadOnly Property Count() As Integer
Get
Return _coltab.Rows.Count
End Get
End Property
''' <summary>Farben speichern</summary>
Public Function Save(ByVal Filename As String) As Boolean
Try
_coltab.WriteXml(Filename, XmlWriteMode.WriteSchema)
Return True
Catch ex As Exception
Return False
End Try
End Function
''' <summary>Farben laden</summary>
Public Function Load(ByVal Filename As String) As Boolean
Try
_coltab.Rows.Clear()
Dim rm As XmlReadMode = _coltab.ReadXml(Filename)
Return True
Catch ex As Exception
Return False
End Try
End Function
Private Function RandomColor() As Color
Return Color.FromArgb(_rndm.Next(0, 256),
_rndm.Next(0, 256), _rndm.Next(0, 256))
End Function
Private Function CheckColor(ByVal testcolor As Color) As Boolean
For i As Integer = 0 To _coltab.Rows.Count - 1
If ColorDiff(GetColor(i), testcolor) < _mindiff Then Return False
Next i
Return True
End Function
Private Function ColorDiff(ByVal a As Color, ByVal b As Color) As Integer
Return CInt(Math.Abs(CInt(a.R) - b.R) * 0.5) + _
CInt(Math.Abs(CInt(a.G) - b.G) * 0.4 + _
CInt(Math.Abs(CInt(a.B) - b.B) * 0.1))
End Function
End Class MfG
Manfred
Beitrag wurde zuletzt am 09.07.12 um 15:08:29 editiert. | |
Re: zufällige Farben | | | Autor: Caddy | Datum: 09.07.12 18:50 |
| Danke Manfred, sowas suchte ich. Habe es für mich etwas angepasst. Muss mich noch etwas in Xml einlesen.
Gruss Caddy | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|