Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.014 c
1-43611
$tranger
2004-03-02 16:49
2004.03.14
Работа с StringTable


1-43583
__Dmitry
2004-02-26 13:08
2004.03.14
TWebBrowser - блокировка Ctrl+N


1-43526
Mixa
2004-02-27 19:05
2004.03.14
TColor -> String


14-43866
Verg
2004-02-21 12:43
2004.03.14
Machine Head - это драйв!


3-43311
nejest
2004-02-10 16:24
2004.03.14
Можно ли обойтись 1 запросом?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский