var
  a: TBitmap;
  b: TJPEGimage;
  myimage: TADOBlobstream;
begin
  //字段Myimage为数据库中的一个图片字段,此字段可以存放
  //BMp格式的图片也可以存放JPEG格式的图片
  myimage := TADOBlobstream.Create(Adoquery1Myimage, bmRead);  a := TBitmap.create;
  b := TJPEGimage.create;
  a.LoadFromStream(myimage);
  b.LoadFromStream(myimage);
  //我想问在我使用LoadFromStream之前怎样判断是JPEG图片还是BMP图片
end;

解决方案 »

  1.   

    没有办法,除非另加字段,要不只能是将流读出后才能判断。jpeg和bmp都有头文件格式,里面可以区分出来。建议先读出内存流,分析判断之后再copy到bmp或jpeg中。
      

  2.   

    读文件头最开始的标记符最简单~~~MyImage.ReadBuffer(Buffer, 2);
    MyImage.Position := 0;
    if Buffer = $4D42 then
    begin
      //BMP
    end
    else if Buffer = $D8FF then
    begin
      //JPEG
    end
    else if Buffer = $4947 then
    begin
      //GIF
    end
    else if Buffer = $050A then
    begin
      //PCX
    end
    else if Buffer = $5089 then
    begin
      //PNG
    end
    else if Buffer = $4238 then
    begin
      //PSD
    end
    else if Buffer = $A659 then
    begin
      //RAS
    end
    else if Buffer = $DA01 then
    begin
      //SGI
    end
    else if Buffer = $4949 then
    begin
      //TIFF
    end
    else
    begin
      //ERR
    end;