Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Настройка цвета картинки.


Автор: SAVANE 12.5.2008, 14:22
Все привет.
У меня есть компонент, который делает кнопку из 3х картинок (Отпущена, Нажата, Наведена мышь).
Рисунки для кнопок рисовал сам (формат bmp). 
Как мне можно сделать так чтоб пользователь мог менять цвета кнопок (тоесть картинок для этих кнопок).
Картинка нарисована на основе оттенков голубого цвета (градиенты).
Спасибо за любые подсказки потому как я bmp. 

Автор: HEyMEXA 12.5.2008, 14:24
скажи чо за компонетнт а лучше его выложи

Автор: SAVANE 12.5.2008, 14:35
Суть не в компоненте.
HEyMEXA Если компонент нужен иши на форуме.
Их на самом деле много. 
Если лень пиши в ПМ адрес почты вечером вышлю. 


Автор: SAVANE 13.5.2008, 14:45
НАшел в ДРКБ код чуть подстроил его под себя и тем самым могу менять оттенок картинки
Вот пример для изменения в сторону убывания цвета РЕД.
Подскажите пожалуйста как исключить изменение белого цвета (тоесть чтобы белое оставалось белым)
В коде использовал if (R<253) and (B<253) and (G<253) then но не работает. Толи картинка ваще не меняется толи и белый меняет.

Код

function Mixer22(Bitmap: TBitmap; Value: Byte): TBitmap;
type
TRGB = record
   B, G, R: Byte;
end;
pRGB = ^TRGB;
var
x, y: Word;
Dest: pRGB;
begin
Begin
    for y := 0 to Bitmap.Height - 1 do begin
     Dest := Bitmap.ScanLine[y];
     for x := 0 to Bitmap.Width - 1 do begin
       with Dest^ do
           if (R<253) and (B<253) and (G<253) then R := BLimit(Round(R-1));
       Inc(Dest);
       end;
     end;
   end;
   Result:=Bitmap;
end;


P.S.
Наконецто толком могу сформулировать задачу. 
Есть картинка (с градиентом). На ней можно выделить основной цвет. К примеру голубой. Нужно чтоб пользователь таская 3 ТракБара мог менять картинку таким образом чтоб заменялся основной цвет(т.е. голубой) на тот который выставляется трекбарами (Соответствено чтобы менялся градиент к примеру не от голубого к белому а от красного к белому.) Ну и плюс чтоб на картинке белый цвет оставался всегда белым.

Автор: SAVANE 13.5.2008, 16:27
Код

function BLimit(B: Integer): Byte;
begin
   if B < 0 then
     Result := 0
   else if B > 255 then
     Result := 255
   else
     Result := B;
end;
.....................
Procedure ButtonMixer(Bitmap: TBitmap; RT, GT, BT: integer);
type
TRGB = record
   B, G, R: Byte;
end;
pRGB = ^TRGB;
var
x, y: Word;
Dest: pRGB;
begin
   for y := 0 to Bitmap.Height - 1 do begin
     Dest := Bitmap.ScanLine[y];
     for x := 0 to Bitmap.Width - 1 do begin
       with Dest^ do begin

              if R <> 255 then R:=Blimit((R+RT) div 2);
              if G <> 255 then G:=Blimit((G+GT) div 2);
              if B <> 255 then B:=Blimit((B+BT) div 2);

       end;
       Inc(Dest);
     end;
   end;
end;


Использование
Код

ButtonMixer(image2.Picture.Bitmap, TrackBar1.Position, TrackBar2.Position, TrackBar3.Position);

 smile  smile  smile

ТракБары Мин=-255 МАХ=255 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)