Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.14;
Скачать: CL | DM;

Вниз

Как создать иконку в 24-битном цвете?   Найти похожие ветки 

 
Dimaxx   (2003-06-24 00:52) [0]

Как создать иконку в 24-битном цвете? И VCL, и KOL делают это шляпно и страшно перевирают цвета.

На диске есть файл-заготовка размером 32х32 и 24-битным цветом (цвета отличаются от стандартной палитры).
Я пишу так:

var BMP,MSK: TBitmap;
ICO: TIcon;
II: TIconInfo;

......
BMP:=TBitmap.Create;
BMP.LoadFromFile("test.bmp");
MSK:=TBitmap.Create;
MSK.Assign(BMP);
MSK.Mask(BMP.Canvas.Pixels[0,BMP.Height-1]); // Создаем маску
ICO:=TIcon.Create;
II.fIcon:=True; ( II)
Как создать иконку в 24-битном цвете? И VCL, и KOL делают это шляпно и страшно перевирают цвета.

На диске есть файл-заготовка размером 32х32 и 24-битным цветом (цвета отличаются от стандартной палитры).
Я пишу так:

var BMP,MSK: TBitmap;
ICO: TIcon;
II: TIconInfo;

......
BMP:=TBitmap.Create;
BMP.LoadFromFile("test.bmp");
MSK:=TBitmap.Create;
MSK.Assign(BMP);
MSK.Mask(BMP.Canvas.Pixels[0,BMP.Height-1]); // Создаем маску
ICO:=TIcon.Create;
II.fIcon:=True; // Создаем иконку
II.hbmMask:=MSK.Handle; // Хэндл битмапа с маской
II.hbmColor:=BMP.Handle; // Хэндл битмапа с изображением
ICO.Handle:=CreateIconIndirect(II); // Создаем иконку
ICO.SaveToFile("test.ico"); // Пишем на диск
ICO.Free;
BMP.Free;
MSK.Free;
......


Смотрим получившуюся иконку - цвета перевраны, цвет фона черный и
вообще иконка какая-то "кривая". Гружу ее в Microangelo - он показывает
32х32 на 16 цветов!!!!! Хотя винда показывает 32х32 в TrueColor! Этот
пример в VCL. В KOL тоже самое, но иконка получается в 256-цветном
исполнении (прогресс!!). Но дальше этого дело не идет. Как все-таки
получить ПРАВИЛЬНУЮ иконку с разной глубиной цвета?


 
Vladimir Kladov   (2003-06-24 20:54) [1]

Нам неинтересен код для VCL. А вот в коде для KOL делается ли принудительное приведение формата битмата к pf8bit? Что, если предварительно попробовать сохранить исходный битмапв test.bmp на диск, и убедиться, что сам битмап сохраняется верно?


 
Dimaxx   (2003-06-25 02:37) [2]

Проверял - сохраняется верно. А какой код - не имеет значения, так как и KOL, и VCL работают НЕВЕРНО! А принудительное приведение формата в 8-битному "спалит" всю палитру. Так как приводится к стандарной палитре. А у моего битмапа палитра отличается от стандартной. Microangelo из этого битмапа сделал нормальную иконку в 24-битном цвете (не переврав цвета).


 
Vladimir Kladov   (2003-06-25 20:28) [3]

Вышлите иконку в true color. Надо посмотреть, что в IDI.bColorCount, IDI.bReserved записывать.


 
Vladimir Kladov   (2003-06-27 18:00) [4]

Я немного поразбирался. Пока результат такой, что если текущее разрешение не 24 бит, то при загрузке иконка получается соответствующей глубины цвета, а не 24 бит. Так делает Windows. При этом цвета портятся. Нужно будет использовать новую процедуру SaveIcons2StreamEx( [ Bmp, Msk ], Strm ), тогда сохраняется именно в том формате, который имеет Bmp: PBitmap.


 
Dimaxx   (2003-06-27 22:52) [5]

Что я могу сказать... СПАСИБО-О-О!!!



Страницы: 1 вся ветка

Текущий архив: 2004.03.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
14-43894
RealRascal
2004-02-16 06:22
2004.03.14
Идеи...


1-43434
Crazy_
2004-03-01 13:24
2004.03.14
Есть хелп файл(мелкософ-й), что с ним можно сделать в делфи ??


14-43767
wara
2004-02-04 12:00
2004.03.14
Загниваение Delphi?


9-43239
K.o.Z
2003-08-20 19:24
2004.03.14
Логическая струкура игрового движка


1-43503
YurikGl
2004-02-28 22:14
2004.03.14
Acrobat шрифты