Главная страница
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.043 c
1-43629
Silver_
2004-03-01 19:28
2004.03.14
Трабл с XPManifest-ом в D7. В D6 все OK


3-43402
Новичек
2004-02-12 11:08
2004.03.14
TADODataSet проблемы при вставке в master/detail


11-43411
Юрий К
2003-06-23 17:33
2004.03.14
Listbox и multiselection


3-43250
Leech
2004-02-13 10:52
2004.03.14
Table:=false; => Error :(


1-43574
Delph
2004-02-27 16:29
2004.03.14
Alignment и TEdit