![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глубина цвета в TImageList
CRLF © (2012-02-02 19:25:00)Имеем примерно такое:
_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, если это имеет значение.
brother (2012-02-03 18:14:00) [1]> в мсдне про кол-во бит на цвет не сказано
это не радует(
Dimka Maslov (2012-02-03 17:05:00) [2]Ничего в мсдне про кол-во бит на цвет не сказано.
CRLF (2012-02-03 17:01:00) [3]Мы, видимо, друг друга не поняли. ImageList.AddMasked() в итоге приводит к вызову апишной ImageList_Add. В приведенном выше примере используется апишная же ImageList_LoadBitmap, вызов TImageList.ResourceLoad() в конечном итоге приводит к вызову ImageList_LoadImage(). Куда ещё глубже смотреть? :-)
brother (2012-02-03 16:18:00) [4]> А фиг его знает
а посмотреть?
CRLF (2012-02-03 15:24:00) [5]
> а что там в генофонде по этому поводу?
А фиг его знает. ImageList_LoadBitmap/ImageList_LoadImage портит цвета. ImageList_Add не портит.
brother (2012-02-03 15:20:00) [6]> Если же прямо из ресурса в ImageList грузить, то цвет урезается
> до четырёхбитного
а что там в генофонде по этому поводу? может стоит чуть переписать?
CRLF (2012-02-03 12:36:00) [7]Цирк на дроті... Если из ресурса загрузить в битмап, а затем ImageList.AddMasked(Bmp, ...), то глубина цвета сохраняется. Если же прямо из ресурса в ImageList грузить, то цвет урезается до четырёхбитного.
Dimka Maslov (2012-02-02 20:17:00) [8]Инфа 100%. На основании собственного опыта.
CRLF (2012-02-02 19:59:00) [9]
> ImageList портит картинки. Это факт.
А где об этом факте пишут авторитетные источники? MSDN, например.
Dimka Maslov (2012-02-02 19:56:00) [10]Bmp.PixelFormat надо выставлять перед сохранением. ImageList портит картинки. Это факт. Как вариант использовать TList c битмапами.
CRLF (2012-02-02 19:50:00) [11]PixelFormat -- это у битмапа. С битмапом полный порядок. Если я загружаю в битмап напрямую из ресурса, с цветами всё в порядке.
Картинка портится где-то в глубинах ImageList. В порядке эксперимента пробовал принудительно ставить ImageList.ColorDepth := cd24Bit, не помогает. Сохраняемой картинке можно задать любую битность, но реально цветов остаётся 16.
Dimka Maslov (2012-02-02 19:46:00) [12]PixelFormat