![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проблема с расширением и его переменой [D7, WinXP]
SmikE © (2004-11-18 14:02:00)Есть вот такой код, записанный в обработчик кнопки:
s:=ExtractFileExt(opendialog1.FileName);
if s='.gif' then ConvertGIF; //Конвертирует gif в bmp, рабочий
if (s='.jpeg') or (s='.jpg') then ConvertJPG; //Конвертирует jpg в bmp, тоже в порядке
при работе с gif вылетает ошибка 'invalid GIF signature'
а если поменять местами строчки кода, то JPEG Eror #53,что делать?
Digitman (2004-11-18 17:08:00) [1]
> SmikE (18.11.04 15:03) [7]
> процедурах ошибки нет
только вот не надо уже здесь горбатого лепить !
по-твоему, сообщения
'invalid GIF signature'
'JPEG Eror #53'
выдает кто угодно, хоть святой дух, только не твои процедуры ? так что ли ?
SmikE (2004-11-18 15:03:00) [2]И всё-таки в процедурах ошибки нет, ну помогите плз
Ega23 (2004-11-18 14:35:00) [3]И тем не менее ВСЕ графические редакторы поступают именно так. Если переименовать gif в jpeg, то он от этого лучше открываться не станет, но считается, что если пользователь дошел до такой жизни - то это уж его проблемы.
Не надо мне грязи! Переименуй bmp в pas и открой его через ACDSee.
TUser (2004-11-18 14:15:00) [4]Значит, у тебя проблема в ConvertJPG
SmikE (2004-11-18 14:12:00) [5]Проблемы возникают и при работе с НАСТОЯЩИМИ gif и JPG
TUser (2004-11-18 14:09:00) [6]
> НЕЛЬЗЯ формат графических файлов определять по их расширению
И тем не менее ВСЕ графические редакторы поступают именно так. Если переименовать gif в jpeg, то он от этого лучше открываться не станет, но считается, что если пользователь дошел до такой жизни - то это уж его проблемы.
Digitman (2004-11-18 14:08:00) [7]
> при работе с gif вылетает ошибка 'invalid GIF signature'
значит в файле с gif-расширением отнюдь не данные в gif-формате
Ega23 (2004-11-18 14:07:00) [8]НЕЛЬЗЯ формат графических файлов определять по их расширению. Для этого сигнатура как раз существует.
Что-то типа этого:
type
TGraphicFormat=(gfUnknown, gfBMP, gfJPEG, gfGIF, gfTIFF);
function GetGraphicFormat(const FileName:String):TGraphicFormat;
var
Buffer: array[0..2] of Byte;
fs:TFileStream;
begin
Result:=gfUnknown;
try
fs:=TFileStream.Create(FileName,fmOpenRead);
fs.ReadBuffer(Buffer, 3);
if (Buffer[0] = $49) and (Buffer[1] = $49) and (Buffer[2] = $2A) then Result:=gfTIFF;
if (Buffer[0] = $42) and (Buffer[1] = $4D) then Result:=gfBMP;
if (Buffer[0] = $FF) and (Buffer[1] = $D8) then Result:=gfJPEG;
if (Buffer[0] = $47) and (Buffer[1] = $49) and (Buffer[2] = $46) then Result:=gfGIF;
finally
fs.Free;
end;
end;