Newsgroup: it.comp.lang.delphi
Titolo: Domanda particolare su colori

E' una curiosita' che ho in mente da tempo... Mi chiedevo se era possibile
"miscelare" due colori considerandone anche le proporzioni.
So che in teoria basta una OR:
$FF0000 --> Blu
OR
$0000FF --> Rosso
=
$FF00FF --> Viola (o Fuchsia)
Ma cosi' corrisponde a un colore con 50% di blu e 50% di rosso. Ma se
volessi tirar fuori il risultato corrispondente al 70% di blu e il 30% di
rosso? Oppure il 10% di blu, il 20% di verde, il 50% di grigio e il 20% di
giallo? Non posso modificare i valori da combinare con le OR, in quanto
cambierebbero i colori. Mi servirebbe modificare appunto le percentuali in
cui essi contribuiscono a formare il colore finale.
Qualcuno ha idee in merito? Mi piacerebbe togliermi questo pallino... =)
Ciao
Daigo

Forse con degli Shr ed Shl oppure dei ROR e ROL potresti risolvere
--
Andrea Raimondi
-------------------------------
Redattore corso di
Delphi di Software
Planet
-------------------------------
www.softwareplanet.net
Daigo <da...@NONVOGLIOSPAMedisons.it> wrote in message
3aHr6.8603$6W.7...@news.infostrada.it...


cui essi contribuiscono a formare il colore finale.
Questa parte prorio non l'ho capita, scusa ;)
Ciao,
Massimo.
-- 
"Ciao Rex, che cavolo di situazione eh? Due dentro, due fuori, puo' succedere di tutto!"

Se ho capito bene ti serve qualcosa di simile.
Se è cosi, testala un po' prima di usarla.
function PercentualeDiColore(Colore : TColor;
                            PrcR,PrcG,PrcB: real): TColor;
var r, g , b : byte;
begin
 r := trunc(GetRValue(Colore) * PrcR / 100);
 g := trunc(GetGValue(Colore) * PrcG / 100);
 b := trunc(GetBValue(Colore) * PrcB / 100);
 Result := RGB(r,g,b);
end;
cia'!
--
AmMaT
m   w
M   a
a   i
TwAiN

 ha scritto nel messaggio
news:98okdd$c5u$1...@pegasus.tiscalinet.it...

No, non e' cosi'. Immagina di avere delle vernici: a seconda di come le
mischi ottieni un colore diverso, ma il colore di base di ciascuna di esse
non cambia. Questo vuol dire che il blu rimane sempre blu, il rosso rimane
rosso, il giallo pallido rimane giallo pallido, il verde smeraldo rimane
verde smeraldo, ma a seconda delle proporzioni la tinta finale cambia. Con
la routine che mi hai dato tu invece viene alterato ciascuno dei colori di
base (l'avevo gia' provata, ma non fa al caso mio).
Inoltre io ho una sola percentuale per ciascun colore RGB (esempio: 70% di
giallino chiaro, che a sua volta puo' valere $AAFFAA), non ho le percentuali
per ciascuna componente RGB di ciascun colore.
Lo so che non e' semplice, ma faccio un esempio pratico: prova a ricavarmi
il risultato di 50% di blu, 20% di fuchsia e 30% di diluente trasparente
(che non ha colore, ma contribuisce a rendere "pallida" e trasparente la
tinta finale). Non e' cosi' immediato, penso che sia necessario considerare
anche saturazione e tutto il resto, ma non so dove cercare documentazione.
Sapreste indicarmi qualche sito?
Grazie
Daigo

 documentazione. Sapreste indicarmi qualche sito?
non ne ho idea, non ho mai affrontato l'argomento, ma ti diro' questo cosa
che al 100% di rosso, 100% di verde e 100% di blu e' una cazzata (tieni
conto anche che sono molto stanco)
fare la media dei valori RGB?
es.
col1:  01 02 03
col2:  03 04 08
col3:  05 06 07
colMescolato:= 03 04 06 ???
ovvero
(1+3+5)/3 -> 03
ecc...
mah.. 8)
spero di averti aiutato, non so proprio come, ma lo spero! ;))
Ciao,
Alan Solo

mannaggia... ma vedi se a quest'ora mi tocca lavorare gratis! :)
ok, capito il concetto, io sono un pittore e l'esperienza m'insegna
che non esiste la trasparenza: c'e' sempre un colore dietro di
essa (il colore del supporto).
function mescola(colore1, colore2: tcolor; qt1, qt2: integer): tcolor;
var r, g , b : byte;
begin
 r := (GetRValue(Colore1)*qt1 + GetRValue(Colore2)*qt2) div (qt1+qt2);
 g := (GetGValue(Colore1)*qt1 + GetGValue(Colore2)*qt2) div (qt1+qt2);
 b := (GetBValue(Colore1)*qt1 + GetBValue(Colore2)*qt2) div (qt1+qt2);
 Result := RGB(r,g,b);
end;
dove:
colore1 è un colore;
colore2 è un colore o il colore che traspare dal medium (diluente);
qt1 è la quantità di spremute dal tubetto1;
qt2 è la quantità di spremute dal tubetto 2 o la
quantità di medium versato,
tutto questo e viceversa...
puoi aggiungere delle alterazioni con la prima routine
che ho postato. Esempio, la trementina è trasparente,
la vernice d'ambra (costosissima, mezzo milione per
10 centilitri) da' una tonalità rosso antico,
la coppale va piu' sul bruno, per l'opacità devi
ingrigire di qualcosina ecc... ma sono costanti che
dovresti sperimentare manualmente!
Magari non è molto ma è uno spunto.
Per i siti giuro che non ne conosco nemmeno uno
a suo tempo li cercai ma poi mi dovetti arrangiare
da solo.
cia' cia'!


 mah.. 8)
AIUUUUTO!!! PRESTO, PRESTO! UNA BRANDA!!!
...'notte, Alan! :)


 end;
visto che ho detto un mucchio di cavolate, ti do una mano come posso
function mescola(colore1, colore2: tcolor; qt1, qt2: integer): tcolor;
begin
 Result :=
  RGB( GetRValue(Colore1)*qt1 + GetRValue(Colore2)*qt2) div (qt1+qt2),
       GetGValue(Colore1)*qt1 + GetGValue(Colore2)*qt2) div (qt1+qt2),
       GetBValue(Colore1)*qt1 + GetBValue(Colore2)*qt2) div (qt1+qt2) )
end;
come dici? forse devo usare quella branda? ... gia'... yawn! 8-0
'notte, ;)
Alan Solo

 fare una media, come da te accennato durante il sonno! :)
porco can, e' vero, hai aggiunto il fatto delle quantita' ma il succo e'
quello... e tu che volevi farmi credere che stavo veramente delirando!!
;)))
quasi quasi comincio a giocare i codici pascal che sogno al lotto! 8)
Ciao,
Alan Solo

 end;
Ok! Ora č ottimizzata per benino!
cmq, in effetti si tratta davvero di fare una
media, come da te accennato durante il sonno! :)
--


 wrote in message
98r6rf$38aur$1...@ID-44131.news.dfncis.de...


ok va bene...
non va bene...
grazie...
prego...
funziona ma manca qualche cosa...
fatti i fatti tuoi...
non č quello che mi serve...
ma va a mori'ammazzato...
non funziona...
non hai centrato il problema...
mi da' errore qui o li...
si puo' migliorare...
Mah!
--
AmMaT
m   w
M   A
a   i
TwAiN


Dici a me? Sai che non ho ancora provato? Ho avuto altre faccende da
sistemare, ma la routine che hai postato dovrebbe andare bene, cosi' a prima
vista.
Comunque ti ringrazio per la disponibilita', e scusa la mia risposta
tardiva. =)
Ciao
Daigo

 tardiva. =)
Ah, meno male! cominciavo a pensare di averti perso! ;)
