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

Вниз

Глубина цвета в TImageList   Найти похожие ветки 

 
CRLF   (2012-02-02 19:25) [0]

Имеем примерно такое:
_IL := TImageList.Create(nil);
 //_IL.ResourceLoad(rtBitmap, "GLYPHS", clWhite);
 _IL.Handle := ImageList_LoadBitmap(HInstance, "GLYPHS", 16, 0, clWhite);

 Bmp := TBitmap.Create;
 _IL.GetBitmap(0, bmp);
 Bmp.SaveToFile("d:\Glyph.bmp");
 FreeAndNil(Bmp);

В ресурсе лежит 24-битный битмап (или 8-битный, на результат не влияет). В итоговом d:\Glyph.bmp получаем 16-цветную картинку. Почему так? Windows 7 SP1, Delphi XE, если это имеет значение.


 
Dimka Maslov ©   (2012-02-02 19:46) [1]

PixelFormat


 
CRLF   (2012-02-02 19:50) [2]

PixelFormat -- это у битмапа. С битмапом полный порядок. Если я загружаю в битмап напрямую из ресурса, с цветами всё в порядке.

Картинка портится где-то в глубинах ImageList. В порядке эксперимента пробовал принудительно ставить ImageList.ColorDepth := cd24Bit, не помогает. Сохраняемой картинке можно задать любую битность, но реально цветов остаётся 16.


 
Dimka Maslov ©   (2012-02-02 19:56) [3]

Bmp.PixelFormat надо выставлять перед сохранением. ImageList портит картинки. Это факт. Как вариант использовать TList c битмапами.


 
CRLF   (2012-02-02 19:59) [4]


> ImageList портит картинки. Это факт.
А где об этом факте пишут авторитетные источники? MSDN, например.


 
Dimka Maslov ©   (2012-02-02 20:17) [5]

Инфа 100%. На основании собственного опыта.


 
CRLF   (2012-02-03 12:36) [6]

Цирк на дроті... Если из ресурса загрузить в битмап, а затем ImageList.AddMasked(Bmp, ...), то глубина цвета сохраняется. Если же прямо из ресурса в ImageList грузить, то цвет урезается до четырёхбитного.


 
brother ©   (2012-02-03 15:20) [7]

> Если же прямо из ресурса в ImageList грузить, то цвет урезается
> до четырёхбитного

а что там в генофонде по этому поводу? может стоит чуть переписать?


 
CRLF   (2012-02-03 15:24) [8]


> а что там в генофонде по этому поводу?
А фиг его знает. ImageList_LoadBitmap/ImageList_LoadImage портит цвета. ImageList_Add не портит.


 
brother ©   (2012-02-03 16:18) [9]

> А фиг его знает

а посмотреть?


 
CRLF   (2012-02-03 17:01) [10]

Мы, видимо, друг друга не поняли. ImageList.AddMasked() в итоге приводит к вызову апишной ImageList_Add. В приведенном выше примере используется апишная же ImageList_LoadBitmap, вызов TImageList.ResourceLoad() в конечном итоге приводит к вызову ImageList_LoadImage(). Куда ещё глубже смотреть? :-)


 
Dimka Maslov ©   (2012-02-03 17:05) [11]

Ничего в мсдне про кол-во бит на цвет не сказано.


 
brother ©   (2012-02-03 18:14) [12]

> в мсдне про кол-во бит на цвет не сказано

это не радует(



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

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

Наверх




Память: 0.49 MB
Время: 0.017 c
2-1382536357
Дмитрий
2013-10-23 17:52
2014.09.28
Останов без точки останова


15-1392455034
Юрий Зотов
2014-02-15 13:03
2014.09.28
А не устроить ли нам ММП с культурной программой?


15-1392928202
Юрий
2014-02-21 00:30
2014.09.28
С днем рождения ! 21 февраля 2014 пятница


2-1382550259
Новичок
2013-10-23 21:44
2014.09.28
Преобразование типов


2-1382445619
LDV
2013-10-22 16:40
2014.09.28
xml-парсер