Hey, alter Mann, Du bist meine Rettung!
Absolut Spitze!!! Genau so wird's gemacht. Schön, dass Du Dir die Mühe gemacht hast.
Würde Dir gern meinen vollsten Dank ausdrücken!!
/e: Mann, Dein Programmtext ist wirklich brauchbar! Hast Du Dir das selbst ausgedacht?
24-Bit zu 16-Farben-Raster
- alter Mann
- Beiträge: 201
- Registriert: 29.08.2008 09:13
- Wohnort: hinterm Mond
Re: 24-Bit zu 16-Farben-Raster
ja hab ich, allerdings für einen anderen Zweck, als Anpassung an die vordefinierten AUTOCAD-Farben
Win11 64Bit / PB 6.0
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: 24-Bit zu 16-Farben-Raster
Ich hätte das ganze wahrscheinlich mit dem HSV-Farbraum versucht, aber das wäre wahrscheinlich wieder Overkill. Ich denke auch, dass Suche-Minimum-Routine von alter Mann, vollkommen reicht.
Re: 24-Bit zu 16-Farben-Raster
So ganz vestehe ich den Code nicht, da er nicht direkt ausführbar ist.
Hat jemand ein snippet der funktioniert ?
Hat jemand ein snippet der funktioniert ?
Rings hat geschrieben:ziert sich nich beim zitieren
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: 24-Bit zu 16-Farben-Raster
Der Code berechnet im Grunde einfach den euklidischen Abstand zwischen allen 16 DOS-Farben und der gesuchten Farbe, die man als 24-Bit-Code angegeben hat. Und dann kriegt man als Ergebnis die Nummer der Farbe, die am nächsten an der gesuchten Farbe dran liegt.
Edit:
Hier noch eine abgeänderte Version, die auch direkt lauffähig ist:
Edit:
Hier noch eine abgeänderte Version, die auch direkt lauffähig ist:
Code: Alles auswählen
Structure Color24
r.a
g.a
b.a
EndStructure
Structure Color24Array
count.i
c.Color24[0]
EndStructure
Global *colorPalette16.Color24Array = ?ColorPalette16
Procedure getNearestPaletteColor(color.l, *palette.Color24Array)
Protected i.i, min.i = 255 * 255 * 3, diff.i, rDiff.i, gDiff.i, bDiff.i
Protected minColor.i = -1
For i = 0 To *palette\count - 1
rDiff = Red(color) - *palette\c[i]\r
gDiff = Green(color) - *palette\c[i]\g
bDiff = Blue(color) - *palette\c[i]\b
diff = rDiff * rDiff + gDiff * gDiff + bDiff * bDiff
If (diff < min)
minColor = i
min = diff
EndIf
Next
ProcedureReturn minColor
EndProcedure
Debug getNearestPaletteColor(RGB(12, 34, 56), *colorPalette16)
Debug getNearestPaletteColor(RGB(127, 0, 200), *colorPalette16)
DataSection
ColorPalette16:
Data.i 16
Data.a 0, 0, 0,
0, 0, 127,
0, 127, 0,
0, 127, 127,
127, 0, 0,
127, 0, 127,
127, 127, 0,
191, 191, 191,
127, 127, 127,
0, 0, 255,
0, 255, 0,
0, 255, 255,
255, 0, 0,
255, 0, 255,
255, 255, 0,
255, 255, 255
EndDataSection