delphi中怎么在不知道源图片是什么格式的情况下 将其转化为另一种格式比如 bitmap

解决方案 »

  1.   

    TImage或TBitmap或其它第三方(png,gif),A(jpg)导入后,B(bitmap)生成,然后load或assign,最后save,就行了
      

  2.   

    每一种图片都有自己的独特格式的:
    function ImageMIMEType(Source: string): string; 
    var 
      Mem: TMemoryStream; 
      Buffer: Word; 
      i: integer; 
    const 
      IMG_CLASS_UNKNOWN = 'unknown'; 
      IMG_CLASS_ERROR = 'error'; 
      IMG_CLASS_JPEG = 'image/jpeg'; 
      IMG_CLASS_BITMAP = 'image/bmp'; 
      IMG_CLASS_GIF = 'image/gif'; 
      IMG_CLASS_PNG = 'image/png'; 
      IMG_CLASS_PCX = 'image/pcx'; 
      IMG_CLASS_PSD = 'image/psd'; 
      IMG_CLASS_RAS = 'image/ras'; 
      IMG_CLASS_SGI = 'image/sgi'; 
      IMG_CLASS_TIFF = 'image/tiff'; 
     
    begin 
      Mem := TMemoryStream.Create; 
     
      try 
        Mem.LoadFromFile(Source); 
        Mem.Position := 0; 
        if Mem.Size = 0 then 
        begin 
           //错误 
          Result := IMG_CLASS_ERROR; 
          Exit; 
        end; 
     
        Mem.ReadBuffer(Buffer, 2); 
     
        if Buffer = $4D42 then 
          Result := IMG_CLASS_BITMAP 
        else 
          if Buffer = $D8FF then 
            Result := IMG_CLASS_JPEG 
          else 
            if Buffer = $4947 then 
              Result := IMG_CLASS_GIF 
            else 
              if Buffer = $050A then 
                Result := IMG_CLASS_PCX 
              else 
                if Buffer = $5089 then 
                  Result := IMG_CLASS_PNG 
                else 
                  if Buffer = $4238 then 
                    Result := IMG_CLASS_PSD 
                  else 
                    if Buffer = $A659 then 
                      Result := IMG_CLASS_RAS 
                    else 
                      if Buffer = $DA01 then 
                        Result := IMG_CLASS_SGI 
                      else 
                        if Buffer = $4949 then 
                          Result := IMG_CLASS_TIFF 
                        else 
                          Result := IMG_CLASS_UNKNOWN; 
     
     
      finally 
     
        Mem.Free; //释放内存流对象 
     
      end; 
    end;
      

  3.   

    不知道格式的话可以直接载入到GDI+中显示,然后转换。加上容错处理就可以了。主要是防止非识别格式的文件。比如你将一个EXE换掉扩展名来转。