Форум: "Media";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
ВнизФункция Colorize для иконок. Найти похожие ветки
← →
Tahion2 (2004-07-04 11:07) [0]Мне нужно сделать функцию Colorize для иконок. Т.е. отображение иконки в оттенках определенного цвета.
Такую функцию я нашел, но она предназначена для колоризации TBitmap. Я хочу доработать ее, чтоб она работала с иконкаками.
Для этого, думаю, отделить у иконки альфа канал, колоризировать RGB канал и потом наложить его назад на альфа канал.
Собственно, как это сделать?
Код процедуры колоризации:procedure ModColors(Bitmap: TBitmap; Color: TColor);
function GetR(const Color: TColor): Byte;
//извлечение красного
begin
Result := Lo(Color);
end;
function GetG(const Color: TColor): Byte;
//извлечение зелёного
begin
Result := Lo(Color shr 8);
end;
function GetB(const Color: TColor): Byte;
//извлечение синего
begin
Result := Lo((Color shr 8) shr 8);
end;
function BLimit(B: Integer): Byte;
begin
if B < 0 then
Result := 0
else if B > 255 then
Result := 255
else
Result := B;
end;
type
TRGB = record
B, G, R: Byte;
end;
pRGB = ^TRGB;
var
r1, g1, b1: Byte;
x, y: Integer;
Dest: pRGB;
A: Double;
begin
Bitmap.PixelFormat := pf24Bit;
r1 := Round(255 / 100 * GetR(Color));
g1 := Round(255 / 100 * GetG(Color));
b1 := Round(255 / 100 * GetB(Color));
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
A := (r + b + g) / 300;
with Dest^ do
begin
R := BLimit(Round(r1 * A));
G := BLimit(Round(g1 * A));
B := BLimit(Round(b1 * A));
end;
end;
Inc(Dest);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var Bitmap:TBitmap;
begin
Bitmap:=TBitmap.Create;
Bitmap.LoadFromFile("D:\2.bmp");
Image1.Picture.Bitmap:=Bitmap;
if ColorDialog1.Execute then
ModColors(Bitmap, ColorDialog1.Color);
Image2.Picture.Bitmap:=Bitmap;
Bitmap.SaveToFile("D:\2.bmp");
end;
← →
X-Disa (2004-07-04 12:42) [1]А почему бы не сконвертить иконку в битмап, пропустить через эту процедурку, и сконвертить обратно в иконку?
← →
Tahion2 (2004-07-04 13:09) [2]Теряется Альфа-канал. В этом и вся проблема. Нужно, чтоб ф-ция работала для иконок XP стиля.
P.S. Забыл вставить иллюстрацию к вопросу:
http://www.Rudnik.com.ua/XpIcon.jpg
← →
Tahion2 (2004-07-04 14:53) [3]есть еще варианты?
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.033 c