| |
|
|
KHR | Hallo miteinander,
ich suche eine Routine, mit der sich berechnen läßt, ob zwei Farben per unser Auge genug von einander abweichen, sagen wir genug Farbkontrast haben um deutliche Abgrenzug zu ermöglichen.
Als Beispiel habe ich hier einen Democode, der Rechtecke mit Zufallsfarben darstellt.
Meist weichen diese Farben kräftig von einander ab. Manchmal sind sie aber leider sehr verwandt.
Wie kann ich das im Programm-Ablauf erkennen, um z.B. die Zufallsfarbe neu berechnen zu lassen?? KompilierenMarkierenSeparieren |
|
|
|
|
| Sowas?
Ähnlichkeit zu schwarz: KompilierenMarkierenSeparieren bzw. KompilierenMarkierenSeparieren Wie unser Auge wird hier jedoch nicht beachtet da unsere Augen RGB nicht linear erfassen sondern durchschnittlich eher nach Rot+Grün und Gelb(=Rot+Grün)+Blau und Helligkeit. (hierbei aber glaube ich nicht vordergründig)
Jedenfalls aber gibt diese Funktion nicht aus, dass Rot und Grün oder Blau und Rot gleich sind.
Die Ähnlichkeit zu weiss wäre gegeben, wenn der Rückgabewert 1-x genommen würde. |
|
|
| |
|
|
|
KHR | Hallo David
danke per Deine Lösung. Ich habs mal in die Fahrräder reingebastelt. KompilierenMarkierenSeparierenFahrräder
by Karl-Heinz Rattay / 2009
einfach ausprobieren
Wems gefällt der kann ja einen screensaver draus machen!
Dieses Modul ist einfach so wie es ist. Wems nicht gefällt, der kann umstricken!!
declare r&, g&, b&, diff&, mix&, lastmix&
declare Zaehler&
proc zeichne
parameters c&,hpos%,vpos%, size%
usepen 0,(size%/5),c&
useBrush 0,c&
ellipse (hpos%-(Size%/1.5)),(vpos%-(Size%/1.5)) - (hpos%+(Size%/1.5)),(vpos%+(Size%/1.5))
ellipse ((hpos%+size%*2.0)-(Size%/1.5)),(vpos%-(Size%/1.5)) - ((hpos%+size%*2.0)+(Size%/1.5)),(vpos%+(Size%/1.5))
usepen 0,(size%/8),c&
moveto hpos%,vpos%
lineto (hpos%+(size%/6)),(vpos% - (Size%*1.05))
lineto (hpos%+(size%*1.7)) , (vpos% - (Size%*0.95) + (size%/6))
lineto (hpos%+(size%*1.1)) , vpos%
moveto (hpos%+(size%/4)),(vpos% - (Size%*1.3))
lineto (hpos%+(size%/6)),(vpos% - (Size%*1.3))
lineto (hpos%+(size%/6)),(vpos% - (Size%*1))
lineto (hpos%+(size%*1.1)) , vpos%
lineto (hpos%+(size%*2)) , vpos%
lineto (hpos%+(size%*1.7)) , (vpos% - (Size%*1) + (size%/6))
lineto (hpos%+(size%*1.7)) , (vpos% - (Size%*1) -(size%/7))
moveto (hpos%+(size%*1.7)-(size%/5)) , (vpos% - (Size%*1.1) -(size%/8))
lineto (hpos%+(size%*1.7)+(size%/5)) , (vpos% - (Size%*1.1) -(size%/8))
moveto (hpos%+(size%*1.1)) , (vpos%-(size%*0.3))
lineto (hpos%+(size%*1.1)) , (vpos%+(size%*0.3))
Endproc
proc FARBAEHNLICHKEIT
PARAMETERS FARBE1&,FARBE2&
RETURN (ABS(GETRVALUE(FARBE1&)-GETRVALUE(FARBE2&))+ABS(GETGVALUE(FARBE1&)-GETGVALUE(FARBE2&))+ABS(GETBVALUE(FARBE1&)-GETBVALUE(FARBE2&))) * 0.001307189542483660130718954248
endproc
cls
showmax
randomize
while 1
inc zaehler&
if zaehler& > 80
while 1
r&=Rnd(256)
g&=Rnd(256)
b&=Rnd(256)
mix&=@rgb(r&,g&,b&)
Case FARBAEHNLICHKEIT (lastmix&,mix&) :CONTINUE
lastmix&=mix&
BREAK
endwhile
zeichne @rgb(r&,g&,b&) ,
((%maxx*0.6) + @rnd(%maxx/4)) ,
(100+@rnd(@rnd(%maxy*0.85))) ,
(15+@rnd(40))
zaehler& = 1
endif
copyBmp 1,0 - %maxx,%maxy > 0,0;0
case @IsKey(27) : end ESC gedrückt
s4 href='./../../funktionsreferenzen/xprofan/endwhile/'>endwhile
Ich biete dazu als Vergleich die Lösung aus dem Nachbarforum an. KompilierenMarkierenSeparierenFahrräder
by Karl-Heinz Rattay / 2009
einfach ausprobieren
Wems gefällt der kann ja einen screensaver draus machen!
Dieses Modul ist einfach so wie es ist. Wems nicht gefällt, der kann umstricken!!
declare r&, g&, b&, diff&, mix&, lastmix&
declare Zaehler&
proc zeichne
parameters c&,hpos%,vpos%, size%
usepen 0,(size%/5),c&
useBrush 0,c&
ellipse (hpos%-(Size%/1.5)),(vpos%-(Size%/1.5)) - (hpos%+(Size%/1.5)),(vpos%+(Size%/1.5))
ellipse ((hpos%+size%*2.0)-(Size%/1.5)),(vpos%-(Size%/1.5)) - ((hpos%+size%*2.0)+(Size%/1.5)),(vpos%+(Size%/1.5))
usepen 0,(size%/8),c&
moveto hpos%,vpos%
lineto (hpos%+(size%/6)),(vpos% - (Size%*1.05))
lineto (hpos%+(size%*1.7)) , (vpos% - (Size%*0.95) + (size%/6))
lineto (hpos%+(size%*1.1)) , vpos%
moveto (hpos%+(size%/4)),(vpos% - (Size%*1.3))
lineto (hpos%+(size%/6)),(vpos% - (Size%*1.3))
lineto (hpos%+(size%/6)),(vpos% - (Size%*1))
lineto (hpos%+(size%*1.1)) , vpos%
lineto (hpos%+(size%*2)) , vpos%
lineto (hpos%+(size%*1.7)) , (vpos% - (Size%*1) + (size%/6))
lineto (hpos%+(size%*1.7)) , (vpos% - (Size%*1) -(size%/7))
moveto (hpos%+(size%*1.7)-(size%/5)) , (vpos% - (Size%*1.1) -(size%/8))
lineto (hpos%+(size%*1.7)+(size%/5)) , (vpos% - (Size%*1.1) -(size%/8))
moveto (hpos%+(size%*1.1)) , (vpos%-(size%*0.3))
lineto (hpos%+(size%*1.1)) , (vpos%+(size%*0.3))
Endproc
cls
showmax
randomize
while 1
inc zaehler&
if zaehler& > 80
while 1
r& = Rnd(256)
g& = Rnd(256)
b& = Rnd(256)
mix& =(r&+g&+b&)/3
diff& = Abs(lastmix&-mix&)
Case diff&<40 : CONTINUE
lastmix& = mix&
BREAK
endwhile
zeichne @rgb(r&,g&,b&) ,
((%maxx*0.6) + @rnd(%maxx/4)) ,
(100+@rnd(@rnd(%maxy*0.85))) ,
(15+@rnd(40))
zaehler& = 1
endif
copyBmp 1,0 - %maxx,%maxy > 0,0;0
case @IsKey(27) : end ESC gedrückt
endwhile
Kann jemand Unterschiede in der Farbverteilung erkennen?
Ich glaube schon etwas erkannt zu haben, mit dem Ergebnis warte ich aber - vielleicht meldet sich ja auch jemand von Euch |
|
|
| Gruß Karl-Heinz WIN XP home/Pro / XPROFAN 11 / P2CPP ATMEL + BASCOM Fan | 14.03.2009 ▲ |
|
|
|
|
| Der Unterschied ist, dass der Algo r+g+b farbenblind ist. Ein rotes Pixel ist danach genauso wertig wie ein Grünes, was dann aber nichts mehr zu tun hat mit ob zwei Farben per unser Auge genug von einander abweichen. |
|
|
| |
|
|