|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Безопасная загрузка битмапов
Всем привет!
Допустим, есть код, который загружает растровое изображение из файла в TBitmap: Код:
SomeBitmap.LoadFromFile('somefile.bmp'); Если же юзер, например, попросит программу загрузить изображение из файла иного формата, то вылетит исключение EInvalidGraphic. Причем определять формат файла нам надо не по расширению имени, а по содержанию (файл может быть переименован, и расширение может отличаться от .bmp). Выполнение в блоке "try .. except on E: EInvalidGraphics do ..." ничего не дает, исключение возникает все равно. Не могу найти ничего по своей теме, потому спрошу здесь: существует ли какой-нибудь способ перед загрузкой битмапа удостовериться, действительно ли это битмап? Ne timeas obscurum. |
#2
|
||||
|
||||
Пардон, проблема решена самостоятельно. Покопался в модуле Graphics и скомбинировал функцию проверки:
Код:
function IsBitmap(const FileName: string): boolean; var Bmf: TBitmapFileHeader; S: TStream; begin S:=TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); S.ReadBuffer(Bmf, SizeOf(Bmf)); Result:=Bmf.bfType = $4D42; S.Free; end; Ne timeas obscurum. |
#3
|
||||
|
||||
Цитата:
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#4
|
||||
|
||||
Остановка отключается какой-нибудь директивой препроцессора, или надо смотреть в настройках IDE?
Ne timeas obscurum. |
#5
|
||||
|
||||
В настройках IDE точно отключается. А вот директивы похоже нет (могу ошибаться, но не нашел).
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
Lothlorien (24.02.2019)
|
#6
|
||||
|
||||
Спасибо, попробую
Ne timeas obscurum. |