![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| Sep. |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 22.7.2004 Репутация: нет Всего: 6 |
натолкнулся на такую ошибку в своей delphi 6, имеется любой код типа:
так вот если ему подсовываешь bmp сохраненную photoshop cs8 или 6, любую 16bit или 24 или 32, но с размером 128х128 пикселей - то выдается ошибка stream read error. Причем если эту картинку пересохранить 7ым фотошопом или IrfunView то все открывается нормально. Причем походу это только с 128х128 картинками. Вот, если у вас нету фотошопа cs можете взять здесьтакую bmp приколоться =) Приходится перед этим открывать файл как file of byte и менять байтики. Может можно как нибудь более изящно этот баг обойти? Через bmp.loadfromstream тоже пробовал =( --------------------
Syn - TotalCommander lister plugin | SynTree - coders sourcebook |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Хм... интересный глюк... Присоединяюсь к вопросу... наверное, ошибка с записью заголовка в фотошопе... Но учитывая то, что стандартный mspaint его открывает, то, возможно, что borland что-то не учёл в своих исходниках... какие-нибудь новые тенденции...
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
Это из-за того, что PhotoShop сохраняет файл с немного большим размером, чем нужно (лишние нулевые байты в конце...), и это отражается в biSizeImage.
TBitmap.ReadDIB вызывает API-функцию CreateDIBSection, которая выделяет память в соответствии с параметрами битмапа (ширина, высота, битов на пиксел...). В случае 128x128x24, под ppvBits отводится системой $C000 байт, а в сохранённой в PS картинке biSizeImage = $C002 байта (из-за лишних двух нулей в конце), и когда потом TBitmap.ReadDIB делает чтение в ppvBits $C002 байт, происходит ошибка... При других размерах не возникает ошибки из-за того, что память всё равно выделяется страницами по 4кб, так что заезд за пределы был некритичен. Я обходил этот баг так:
Смысл в том, что если присвоить biSizeImage нулевое значение, TBitmap.ReadDIB сама посчитает biSizeImage:
-------------------- С уважением, г-н Посол. |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |