Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 10-10-2016
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 13
bucanero Va camino a la fama
Hola a todos,

yo utilizo las siguiente función para determinar el tipo imagen para las extensiones mas conocidas,

Código Delphi [-]
interface
...
   function  GetImageFormat(const AFileName: String; OmitirExtension:Boolean=true): String; overload;
   function  GetImageFormat(Stream: TStream; var fileType:String):boolean; overload;
...
implementation
...
function GetImageFormat(const AFileName: String; OmitirExtension:Boolean=true): String;
///  Si el parametro omitirExtension esta a true, solamente devuelve una extensión
///  cuando las cabezeras del fichero son realmente reconocidas
var
  ext: string;
  FileStream: TFileStream;
begin
  ext := lowerCase(extractFileExt(AFileName));
  try
    FileStream := TFileStream.Create(AFileName, fmOpenRead);
    try
      if not GetImageFormat(FileStream, result) and
       not omitirExtension then
           // si no se reconoce el fichero por su primeros caractes, se devuelve la propia extensión del fichero
           Result:=ext;
    finally
      FileStream.free;
    end;
  except
  end;
end;

function GetImageFormat(Stream: TStream; var fileType:string):Boolean;
var
  FirstBytes: AnsiString;
begin
  result:=False;
  fileType := '';
  if (Stream <> nil) and (Stream.Size > 40) then
  try
    SetLength(FirstBytes, 8);
    Stream.Read(FirstBytes[1], 8);
    if (Copy(FirstBytes, 1, 2) = 'BM') then
      fileType := '.bmp'
    else if (FirstBytes = #137'PNG'#13#10#26#10) then
      fileType := '.png'
    else if (Copy(FirstBytes, 1, 3) = 'GIF') then
      fileType := '.gif'
    else if  (Copy(FirstBytes, 1, 2) = #$FF#$D8) then
      fileType := '.jpg'
    else if (Copy(FirstBytes, 1, 3) = #$49#$49#$2A) then
      fileType := '.tif'
    else if (Copy(FirstBytes, 1, 3) = #$0#$0#$01) then
      fileType := '.ico';
  finally
    result:=(fileType<>'');
  end;
end;
...
end.

Para el resto de extensiones simplemente hay que buscar las cabezeras que utilizan y añadirlas a la lista

Un saludo
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como saber el tamaño de un fichero kenychy C++ Builder 13 19-11-2010 16:46:59
Como saber si un fichero está abierto RaulChemical API de Windows 13 30-12-2008 17:31:42
Cómo saber qué tipo de SO es. Ziara C++ Builder 4 22-09-2008 13:04:21
Cómo saber si un fichero esta marcado de sólo lectura ? David Varios 2 13-08-2008 16:20:19
como saber el tipo de datos de un campo miguelml Varios 4 17-11-2005 08:36:17


La franja horaria es GMT +2. Ahora son las 04:05:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi