Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1156248788
GTAID
2006-08-22 16:13
2006.09.17
Не сворачиваемое окно!


9-1134788983
keht
2005-12-17 06:09
2006.09.17
Теория автомобиля...


15-1155424235
ronyn
2006-08-13 03:10
2006.09.17
Параметры папки


3-1153197441
Layner
2006-07-18 08:37
2006.09.17
Как отловить сообщения о ходе выполнения ХП (на MSSQL)


15-1156363964
Андрей Пазик
2006-08-24 00:12
2006.09.17
Лига Чемпионов.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский