home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Inside Multimedia 1995 August
/
IMM0895.BIN
/
magazin
/
optix
/
disk1
/
optxppac.set
/
NEARCOL.OPT
< prev
next >
Wrap
Text File
|
1995-05-05
|
2KB
|
110 lines
def(i)
def(j)
def(r)
def(g)
def(b)
def(r2)
def(g2)
def(b2)
def(x)
def(y)
def(ncol)
defs(dum$)
procedure nearcol(r,g,b,cmin,cmax,tmax)
rem *** ermittelt die Farbe aus der aktuellen Palette bzw.
rem *** aus einem bestimmten Palettenbereich, die den in
rem *** 'r,g,b' angegebenen Farbwerten am nächsten kommt und
rem *** liefert den Index dieser Farbe in der Global 'NCOL'zurück.
rem *** Wird in dem Toleranzbereich nichts gefunden, wird -1 geliefert.
rem ***
rem *** 'r, g, b' = (r)ot-, (g)rün-, (b)lau-Werte der gesuchten Farbe
rem *** 'cmin, cmax' = Start- und End-Index des Suchbereiches innerhalb
rem *** der aktuellen Vordergrundpalette (0-255)
rem *** 'tmax' = Toleranzbereich (0-63). Je größer dieser Bereich
rem *** angegeben wird, desto genauer wird das Ergebnis.
rem ***
locals(i,j,tol,tol2)
if cmin>=cmax
cmin:=cmax
endif
ncol:=-1
for tol:=0 TO tmax DO
tol2:=tol*tol
for i:=cmin TO cmax DO
getrgbcolor(i,r2,g2,b2)
r2:=r-r2
g2:=g-g2
b2:=b-b2
r2:=r2*r2
g2:=g2*g2
b2:=b2*b2
if (r+r2) < (r+tol2)
if (g+g2) < (g+tol2)
if (b+b2) < (b+tol2)
ncol:=i
goto('nearcolexit')
endif
endif
endif
next(i)
next(tol)
:nearcolexit
return
begin
setpvga
setallpal
clearscreen(8)
setrgbcolor(53,45,10,255)
for j:=0 to 15 do
for i:=0 to 15 do
viewport(160+20*i,50+16*j,160+20*i+18,50+16*j+14)
cbox(0,i+j*16,0)
next(i)
next(j)
nearcol(53,45,10,20,50,13)
sysfont(3,0)
setcolor(0)
setbcolor(255)
printat(80,360,' ')
print('gesuchte Farbe :')
print(' 255 ( r = 53 / g = 45 / b = 10 )')
setbcolor(ncol)
getrgbcolor(ncol,r,g,b)
str(ncol,3,dum$)
printat(80,380,' ')
print('gefundene Farbe im Bereich 20-50: '+dum$)
str(r,3,dum$)
print(' ( r ='+dum$)
str(g,3,dum$)
print(' / g ='+dum$)
str(b,3,dum$)
print(' / b ='+dum$)
print(' )')
y:=ncol/16
x:=ncol-y*16
viewport(160+x*20,50+y*16,160+x*20+18,50+y*16+14)
for i:=0 to 25 do
cbox(13,0,0)
noise(20*ncol+20,20)
pause(100)
next(i)
pause(0)
end