Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли улучшить данную функцию? Функция IsImage? 
:(
    Опции темы
Gnusss
  Дата 18.10.2005, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 19.1.2005

Репутация: нет
Всего: нет



Привет всем!

Вот накатал для личных целей функцию:
Код

function IsImage(FName: String): BooLean;
var
 Ext: String;
 ExtList: TStringList;
begin
 Result:= False;
 Ext:= ExtractFileExt(FName);
 Delete(Ext, 1, 1);
 Ext:= LowerCase(Ext);
 ExtList:= TStringList.Create;
 ExtList.Add('gif');
 ExtList.Add('png');
 ExtList.Add('jpg');
 ExtList.Add('jpeg');
 ExtList.Add('bmp');
 ExtList.Add('ico');
 ExtList.Add('emf');
 ExtList.Add('wmf');
 if ExtList.IndexOf(Ext) <> -1 then
  Result:= True;
 ExtList.Free;
end;
Она определяет, является ли файл изображением.
Вот только что-то она мне не совсем нравится, народ предложите более рациональный вариант.

Заранее спасибо за ответ!
PM MAIL   Вверх
Samhein
Дата 18.10.2005, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Башзэфашовец
**


Профиль
Группа: Участник
Сообщений: 282
Регистрация: 27.6.2005

Репутация: нет
Всего: 3



Мож вот это подойдет:
Код

function IsImage(FName: String): BooLean;
var
 Ext: String;
begin
Ext := ExtractFileExt(FName);
if (Ext='.gif') or (Ext='.png') or (Ext='.jpg') or (Ext='.jpeg') or (Ext='.bmp') or (Ext='.ico') or (Ext='.emf') or (Ext='.wmf') then  Result:= True;
end;



--------------------
Знаю форум наизусть, но писать еще боюсь
PM   Вверх
Alex
Дата 18.10.2005, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Код

uses StrUtils;
...
function IsImage(FName: String): BooLean;
var
 Ext: String;
begin
 Ext:= ExtractFileExt(FName);
 Delete(Ext, 1, 1);
 Result:= AnsiIndexText(Ext, ['gif', 'png', 'jpg', 'jpeg', 'bmp', 'ico', 'emf', 'wmf']) <> -1;
end;

Добавлено @ 21:49
Samhein, не учитываешь, что тебе могут подать строку и вверхнем регистре
Добавлено @ 21:50
Gnusss, но определять тип файла по расширению это не совсем правильно, т.к. расширение может быть любым, а вот содержание файла...
Добавлено @ 21:53
Gnusss, посмотри вот эту тему http://forum.vingrad.ru/index.php?showtopi...&hl=gettypefile


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Samhein
Дата 18.10.2005, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Башзэфашовец
**


Профиль
Группа: Участник
Сообщений: 282
Регистрация: 27.6.2005

Репутация: нет
Всего: 3



Alex, тогда так:
Код

function IsImage(FName: String): BooLean;
var
 Ext: String;
begin
Ext := ExtractFileExt(FName);
StrLower(PChar(Ext));
if (Ext='.gif') or (Ext='.png') or (Ext='.jpg') or (Ext='.jpeg') or (Ext='.bmp') or (Ext='.ico') or (Ext='.emf') or (Ext='.wmf') then  Result:= True;
end;



--------------------
Знаю форум наизусть, но писать еще боюсь
PM   Вверх
Alex
Дата 18.10.2005, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Samhein, угу


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
RA
Дата 19.10.2005, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



Улутшить данную функцию можно добаывив проверку на предмет соответсвия файла с расширением внутреннему контенту.

Тоесть Calc.exe переименованный в Calc.jpg не прокатит. smile

Код

uses axCtrls;

Function IsValidIMG( IMG:TfileName):BOOLEAN;
var
  OleGraphic: TOleGraphic;
  GRP:TPicture;
  fs: TFileStream;
begin
Result:=false;
if not fileExists(IMG) then exit;

  GRP:=TPicture.Create;
 try
  try
    OleGraphic := TOleGraphic.Create;
    fs         := TFileStream.Create(IMG, fmOpenRead or fmSharedenyNone);
    OleGraphic.LoadFromStream(fs);
    GRP.Assign(OleGraphic);
   except
   end;

  finally
    fs.Free;
    OleGraphic.Free;
    GRP.Free;
  end;
  Result:=(Assigned(GRP.Graphic) );
end;



Это сообщение отредактировал(а) RAdmin - 19.10.2005, 12:11
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0449 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.