Главная страница
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.006 c
15-1392713286
cpp_dev
2014-02-18 12:48
2014.09.28
Может ли кто-нибудь кинуть прямую ссылку на С++ компилятор


15-1392653576
orient
2014-02-17 20:12
2014.09.28
русификация cxGrid


15-1392735372
[ВладОшин]
2014-02-18 18:56
2014.09.28
MSSQL: Как узнать какая строка обновлялась последней?


15-1393076122
Дмитрий СС
2014-02-22 17:35
2014.09.28
Сломалось VPN подключение.


2-1382298460
Вова
2013-10-20 23:47
2014.09.28
ClientDataSet ftArray не могу создать поле