Главная страница
    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.018 c
7-43919
Savage2003
2003-12-22 15:21
2004.03.14
Сервисы


11-43417
BelchonokH
2003-06-26 21:32
2004.03.14
form.close или form.free?


7-43909
Rono
2003-12-23 21:38
2004.03.14
Как программно определить номер телефона.


14-43886
Bublik
2004-02-20 19:18
2004.03.14
Ну народ, ну помогите!!!!


14-43791
sancho
2004-02-18 15:56
2004.03.14
Кубик-рубик...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский