Форум: "KOL";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];
ВнизКак создать иконку в 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 вся ветка
Форум: "KOL";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c