![]() |
|
|
#1
|
|||
|
|||
|
Помогите разобраться с цветами в Delphi, пожалуйста
Дано дробное число, нужно его округлить до сотых. Присвоить цвет соответствующей ячейке. Например, значение 1 - черный, 0 - белый, 0.50 - серый. И так по аналогии, например, 0.48 - чуть светлее серого 0.5. Для округления до десятых я вводил значения вручную. Например, так: Код:
if ((trunc(cmas[i,j]*100) mod 10))>4 then tem:=trunc(cmas[i,j]*10)+1;
if ((trunc(cmas[i,j]*100) mod 10))<=4 then tem:=trunc(cmas[i,j]*10);
if tem=0 then Form2.Image1.Canvas.Brush.Color:=$00FFFFFF;
if tem=1 then Form2.Image1.Canvas.Brush.Color:=$00F4F4F4;
if tem=2 then Form2.Image1.Canvas.Brush.Color:=$00E4E4E4;
if tem=3 then Form2.Image1.Canvas.Brush.Color:=$00D4D4D4;
if tem=4 then Form2.Image1.Canvas.Brush.Color:=$00C1C1C1;
if tem=5 then Form2.Image1.Canvas.Brush.Color:=$00B4B4B4;
if tem=6 then Form2.Image1.Canvas.Brush.Color:=$008F8F8F;
if tem=7 then Form2.Image1.Canvas.Brush.Color:=$006F6F6F;
if tem=8 then Form2.Image1.Canvas.Brush.Color:=$00595959;
if tem=9 then Form2.Image1.Canvas.Brush.Color:=$00404040;
if tem=10 then Form2.Image1.Canvas.Brush.Color:=$00000000; При округлении до сотых придется вручную подобрать 100 цветов. Вопрос мастерам - можно ли как-нибудь автоматизировать процесс нахожденмя кода цвета? |
|
#2
|
|||
|
|||
|
Если тебе оттенки серого, то просто воспользуйся функцией RGB().
Теда надо передать 3 одинаковых значения от 0 до 255 (черный и белый на границах соответсвенно). Код:
function SelectColor(Value : Extended) : TColor; var b : byte; begin b := Round(RoundTo(Value,-2) - Int(Value) / 255); Result := RGB(b,b,b); end; |
|
#3
|
|||
|
|||
|
Цитата:
Немного не понял, как с ним работать. Как у меня будет определять, где темнее оттенок, а где светлее ? |
|
#4
|
||||
|
||||
|
Для оттенков лучше использовать другую функцию:
function ColorHLSToRGB(Hue: Word; Luminance: Word; Saturation: Word): TColorRef; Выставляйте в 0 значение Saturation и будет все серое. Например вывести 220 оттенков серого: Код:
for i := 0 to 220 do Canvas.Pixels[i,50] := ColorHLStoRGB(i,i,0); |