Форум: "Основная";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
ВнизImageList и типы bmp Найти похожие ветки
← →
Ega23 © (2006-08-07 13:02) [0]Столкнулся с проблемой - на один вполне определённый bmp-рисунок в рантайм ImageList "ругается" на метод ReplaceImage.
Насколько я понял, TImageList умеет работать далеко не с любой версией bmp.
Вопрос: как, собственно, проверить файл на возможность работы с TImageList?
Способ "в лоб" (попробовать загрузить в ImageList и попытаться словить exception) не предлагать: во-первых я до него уже сам дошёл, а во-вторых мне дизайнерам спецификацию иконок надо выдать. Соответственно нужно описать ограничения.
← →
Desdechado © (2006-08-07 13:24) [1]На заре моего опыта программирования, помню, были проблемы на некоторых видюхах - их драйвера не поддерживали RLE-компрессию битмапов. Может, проблема из той же оперы?
← →
DiamondShark © (2006-08-07 13:25) [2]Сравнить заголовки ругающихся и неругающихся.
Извините.
← →
Ega23 © (2006-08-07 13:25) [3]Ну я же вижу её через ACDSee. И в ImageList в дезайн-тайм всё грузится. А в рантайме чудеса начинаются...
← →
Ega23 © (2006-08-07 13:28) [4]
> Сравнить заголовки ругающихся и неругающихся.
Да я бы с удовольствием. Вот только палитра цветов у обоих - разная. Соответственно сам заголовок разный будет.
Где вообще эту структуру найти можно? Чтобы толково написано было? А то у меня какая-то статья валяется, но она старая и вообще про tiff... :о)
← →
Jeer © (2006-08-07 13:32) [5]- все img должны иметь одинаковый размер и формат.
- желательно размещать в ресурсах проекта и извлекать по LoadFromResourceName
← →
MBo © (2006-08-07 13:34) [6]Существуют битмапы, некорректно читаемые-обрабатываемые TBitmap (в частности, читал о некоторых из сделанных в Adobe Photoshop)
Проблемный битмап отрисовывается при Bitmap.LoadFromfile/Canvas.Draw?
← →
Jeer © (2006-08-07 13:35) [7]+ обновить comctl32.dll
← →
Ega23 © (2006-08-07 13:35) [8]
> Проблемный битмап отрисовывается при Bitmap.LoadFromfile/Canvas.
> Draw?
Так не пробовал. Прекрасно отрисовывается в Image.Pictore.LoadFromFile.
← →
DiamondShark © (2006-08-07 13:38) [9]http://msdn.microsoft.com/library/en-us/gdi/bitmaps_4v1h.asp
← →
DiamondShark © (2006-08-07 13:38) [10]А как ругается?
← →
Eraser © (2006-08-07 13:40) [11]> [6] MBo © (07.08.06 13:34)
> Существуют битмапы, некорректно читаемые-обрабатываемые
> TBitmap (в частности, читал о некоторых из сделанных в Adobe
> Photoshop)
возможно это некоторые битмапы, с т.н. indexed colors? хотя это только предположение...
← →
Ega23 © (2006-08-07 13:42) [12]Могу дать сам проблемный битмап.
Картинку, 16х16, 812 байт
← →
Ega23 © (2006-08-07 13:46) [13]
> А как ругается?
>
На метод Replace - Unable to Replace Image
← →
Desdechado © (2006-08-07 13:47) [14]> 16х16, 812 байт
Это ж сколько в ней цветов? У меня 16*16, 24 бита занимает 566 байтов, а 4битные - 246.
← →
DiamondShark © (2006-08-07 13:54) [15]
> Ega23 © (07.08.06 13:42) [12]
> Могу дать сам проблемный битмап.
> Картинку, 16х16, 812 байт
Давай.
acoulichev@mail.ru
← →
Ega23 © (2006-08-07 14:03) [16]Отправил.
← →
Ega23 © (2006-08-07 14:05) [17]
> Это ж сколько в ней цветов? У меня 16*16, 24 бита занимает
> 566 байтов, а 4битные - 246.
Насколько я понял, зависит от того, сколько цветов в палитре.
← →
DiamondShark © (2006-08-07 14:43) [18]Получил.
Не ругается.
-------
Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн
← →
Ega23 © (2006-08-07 15:49) [19]
> Получил.
> Не ругается.
Чапай думать будет...
← →
antonn © (2006-08-07 18:51) [20]Ega23 © (07.08.06 13:25) [3]
Ну я же вижу её через ACDSee
вот... джпег, сжатый в ней совсем не такой, как в КорелФотоПайнт. Может и с битмапами что делает (знаю, что палитру может поковырять)
← →
DiamondShark © (2006-08-07 22:38) [21]Вот заголовок файла:
0000000000: 42 4D 2C 03 00 00 00 00 │ 00 00 2A 02 00 00
WORD bfType: "BM"
DWORD bfSize: 0000032C (812.)
WORD bfReserved1: 00000000
WORD bfReserved2: 00000000
DWORD bfOffBits: 0000022A (554.)
28 00
0000000010: 00 00 10 00 00 00 10 00 │ 00 00 01 00 08 00 00 00
0000000020: 00 00 00 00 00 00 12 0B │ 00 00 12 0B 00 00 7D 00
0000000030: 00 00 7D 00 00 00
DWORD biSize: 00000028
LONG biWidth: 00000010 (16.)
LONG biHeight: 00000010 (16.)
WORD biPlanes: 0001
WORD biBitCount: 0008
DWORD biCompression: 00000000 (BI_RGB)
DWORD biSizeImage: 00000000 (This may be set to zero for BI_RGB bitmaps)
LONG biXPelsPerMeter: 00000B12 (2834.)
LONG biYPelsPerMeter: 00000B12 (2834.)
DWORD biClrUsed: 007D (125.)
DWORD biClrImportant: 007D (125.)
Всё правильно. Файл размером 812 байт.
8-ми битный индексированный битмап, 125 цветов в поллитре.
sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+125*sizeof(RGBQUAD) = 14 + 40 + 125*4 = 554 (=bfOffBits)
16*16=256, 256 + 554 = 810. Хм... А почему тогда файл размером 812?
За исключением того, что непонятно, почему размер файла 812, а не 810, в файле совершенно ничего необычного.
Читается всем, что только у меня есть графического, включая TBitmap.LoadFromFile из пятой дельфи...
← →
Ega23 © (2006-08-08 10:49) [22]В общем, в чём там дело - совершенно неясно.
Ситуация вкратце:
Есть DBTree (самописный компонент), смотрит на TClientDataSet. Класс-обёртка вокруг CDS, в свою очередь, ловит некие сообщения о смене состояния объекта и по ним "стреляет" в БД и вытягивает соответствующую состоянию иконку.
Теоретически, всё нормально работало до того момента, как один из объектов не принял состояние, которому соответствует данный битмап.
И дальше началась карусель.
Битмап состояния заменил на другой - всё снова заработало.
Мистика какая-то, в общем.
Сейчас уже склоняюсь, что я где-то в недрах компонента что-то с индексами картинок накосячил.
Проверяю.
← →
Desdechado © (2006-08-08 11:32) [23]Немного не в тему, но:
> и по ним "стреляет" в БД и вытягивает соответствующую состоянию иконку.
Очень уж накладно для СУБД и траффика. Может, проще вычитать иконки единожды и хранить их в списке заранее? Если, конечно, их не десятки тысяч...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.051 c