Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ImageList и типы bmp


Страницы:   1 2

Ega23 ©   (2006-08-07 13:02:00) 

Столкнулся с проблемой - на один вполне определённый bmp-рисунок в рантайм ImageList "ругается" на метод ReplaceImage.
Насколько я понял, TImageList умеет работать далеко не с любой версией bmp.
Вопрос: как, собственно, проверить файл на возможность работы с TImageList?
Способ "в лоб" (попробовать загрузить в ImageList и попытаться словить exception) не предлагать: во-первых я до него уже сам дошёл, а во-вторых мне дизайнерам спецификацию иконок надо выдать. Соответственно нужно описать ограничения.


Desdechado   (2006-08-08 11:32:00) [1]

Немного не в тему, но:
> и по ним "стреляет" в БД и вытягивает соответствующую состоянию  иконку.
Очень уж накладно для СУБД и траффика. Может, проще вычитать иконки единожды и хранить их в списке заранее? Если, конечно, их не десятки тысяч...


Ega23   (2006-08-08 10:49:00) [2]

В общем, в чём там дело - совершенно неясно.
Ситуация вкратце:
Есть DBTree (самописный компонент), смотрит на TClientDataSet. Класс-обёртка вокруг CDS, в свою очередь, ловит некие сообщения о смене состояния объекта и по ним "стреляет" в БД и вытягивает соответствующую состоянию иконку.
Теоретически, всё нормально работало до того момента, как один из объектов не принял состояние, которому соответствует данный битмап.
И дальше началась карусель.
Битмап состояния заменил на другой - всё снова заработало.
Мистика какая-то, в общем.
Сейчас уже склоняюсь, что я где-то в недрах компонента что-то с индексами картинок накосячил.
Проверяю.


DiamondShark   (2006-08-07 22:38:00) [3]

Вот заголовок файла:


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 из пятой дельфи...


antonn   (2006-08-07 18:51:00) [4]

Ega23 ©   (07.08.06 13:25) [3]
Ну я же вижу её через ACDSee

вот... джпег, сжатый в ней совсем не такой, как в КорелФотоПайнт. Может и с битмапами что делает (знаю, что палитру может поковырять)


Ega23   (2006-08-07 15:49:00) [5]


> Получил.
> Не ругается.


Чапай думать будет...


DiamondShark   (2006-08-07 14:43:00) [6]

Получил.
Не ругается.

-------

Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн


Ega23   (2006-08-07 14:05:00) [7]


> Это ж сколько в ней цветов? У меня 16*16, 24 бита  занимает
> 566 байтов, а 4битные - 246.


Насколько я понял, зависит от того, сколько цветов в палитре.


Ega23   (2006-08-07 14:03:00) [8]

Отправил.


DiamondShark   (2006-08-07 13:54:00) [9]


> Ega23 ©   (07.08.06 13:42) [12]
> Могу дать сам проблемный битмап.
> Картинку, 16х16, 812 байт

Давай.
acoulichev@mail.ru


Desdechado   (2006-08-07 13:47:00) [10]

> 16х16, 812 байт
Это ж сколько в ней цветов? У меня 16*16, 24 бита  занимает 566 байтов, а 4битные - 246.


Ega23   (2006-08-07 13:46:00) [11]


> А как ругается?
>


На метод Replace - Unable to Replace Image


Ega23   (2006-08-07 13:42:00) [12]

Могу дать сам проблемный битмап.
Картинку, 16х16, 812 байт


Eraser   (2006-08-07 13:40:00) [13]

> [6] MBo ©   (07.08.06 13:34)


> Существуют битмапы, некорректно читаемые-обрабатываемые
> TBitmap (в частности, читал о некоторых из сделанных в Adobe
> Photoshop)

возможно это некоторые битмапы, с т.н. indexed colors? хотя это только предположение...


DiamondShark   (2006-08-07 13:38:00) [14]

А как ругается?


DiamondShark   (2006-08-07 13:38:00) [15]

http://msdn.microsoft.com/library/en-us/gdi/bitmaps_4v1h.asp


Ega23   (2006-08-07 13:35:00) [16]


> Проблемный битмап отрисовывается при Bitmap.LoadFromfile/Canvas.
> Draw?


Так не пробовал. Прекрасно отрисовывается в Image.Pictore.LoadFromFile.


Jeer   (2006-08-07 13:35:00) [17]

+ обновить comctl32.dll


MBo   (2006-08-07 13:34:00) [18]

Существуют битмапы, некорректно читаемые-обрабатываемые TBitmap (в частности, читал о некоторых из сделанных в Adobe Photoshop)

Проблемный битмап отрисовывается при Bitmap.LoadFromfile/Canvas.Draw?


Jeer   (2006-08-07 13:32:00) [19]

- все img должны иметь одинаковый размер и формат.
- желательно размещать в ресурсах проекта и извлекать по LoadFromResourceName


Ega23   (2006-08-07 13:28:00) [20]


> Сравнить заголовки ругающихся и неругающихся.


Да я бы с удовольствием. Вот только палитра цветов у обоих - разная. Соответственно сам заголовок разный будет.
Где вообще эту структуру найти можно? Чтобы толково написано было? А то у меня какая-то статья валяется, но она старая и вообще про tiff...  :о)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо