Форум: "Основная";
Текущий архив: 2014.09.28;
Скачать: [xml.tar.bz2];
ВнизГлубина цвета в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c