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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.039 c
15-1156418174
tar4
2006-08-24 15:16
2006.09.17
Изменение представления числа


2-1156402995
Kacnep
2006-08-24 11:03
2006.09.17
Как определить Handle у Моего сервиса???


2-1157067421
Adios
2006-09-01 03:37
2006.09.17
Как сделать инспектор свойств?


15-1156340251
lorn
2006-08-23 17:37
2006.09.17
D2006 ->crystal report


2-1156750209
C@N
2006-08-28 11:30
2006.09.17
Волшебные батоны....