A Genova diciamo: belin! hai fatto davvero un ottimo lavoro, grazie a funzioni poco documentate del DECIMAL BASIC.Quelo ha scritto: ↑ven nov 01, 2024 3:10 pmHo aggiunto il canale alpha su Decimal Basic
Non è stato particolarmente complicato, si tratta infatti di miscelare il colore dello sfondo (cb) con quello che stiamo usando (cf) secondo una data percentuale (a)
L'unico limite è che ogni disegno deve essere fatto pixel per pixel
GRAZIE SERGIO!
Ci ho messo almeno due ore per capire come funziona e come usare la funzione ALPHA (compreso lo studio della documentazione del COLOR MODE "NATIVE") ma forse ci sono riuscito.
Se non sbaglio, bisogna disegnare le rette (o altro) un pixel alla volta e non come "segmenti", vero?
Allego un programmino di prova. Potresti verificare se ho usato correttamente la funzione ALPHA?
Codice: Seleziona tutto
DECLARE EXTERNAL FUNCTION ALPHA
SET COLOR MODE "NATIVE"
CLEAR
SET WINDOW 0,8,0,8
!'Coloro lo sfondo a striscie arcobaleno
FOR x=0 TO 7
LET r=MOD(x,2)
LET g1=INT(x/2)
LET g=MOD(g1,2)
LET b1=INT(g1/2)
LET b=MOD(b1,2)
SET AREA COLOR ColorIndex(r,g,b)
PLOT AREA: x,0; x+1,0; x+1,7; x,7
NEXT x
!'Disegno dei punti blu (0,0,1) sui colori di sfondo
!'Il blu sarà reso "in trasparenza" rispetto allo sfondo dietro ciascun punto
!'grazie alla funzione ALPHA
!'Inizializzo il randomizzatore
RANDOMIZE
!'Imposto i punti grandi, come bollini
SET POINT STYLE 7
!'Scelgo punti a caso
FOR i=1 TO 1000
LET x=8*RND
LET y=8*RND
!'Chiedo il colore dello sfondo alle coordinate del punto
ASK PIXEL VALUE (x,y) cback
!'Assegno colore blu al punto
LET cforeg=colorindex(0,0,1)
!'Chiedo ad ALPHA di decidere il colore effettivo del punto da disegnare
!'in base a foreground, background e un parametro di trasparenza
SET POINT COLOR ALPHA(cforeg,cback,0.5)
!'Disegno il punto
PLOT POINTS: x,y
NEXT i
END
EXTERNAL FUNCTION ALPHA(cf, cb, a)
LET fr=MOD(cf,256)
LET cf=(cf-fr)/256
LET fg=MOD(cf,256)
LET fb=(cf-fg)/256
LET br=MOD(cb,256)
LET cb=(cb-br)/256
LET bg=MOD(cb,256)
LET bb=(cb-bg)/256
LET r=(a*fr+(1-a)*br)/256
LET g=(a*fg+(1-a)*bg)/256
LET b=(a*fb+(1-a)*bb)/256
LET ALPHA=colorindex(r,g,b)
END FUNCTION