一个stream变量包含BMP或者JPG图象内容,怎样才能将其显示在Timage图片控件中,最后又怎样将Timage控件的图象内容存到一个Tstream变量?注意:这个stream内容事先并不能确定为BMP还是JPG!我是想做成一个activeX Form,以供其它软件使用,就卡在此处,请各位高手指教!给出成功的方法的,肯定给分!

解决方案 »

  1.   

    try先按bmp处理,如果except 再按jpeg处理。
    var strm:TMemoryStream;
        jpg:TJpegImage;
    begin
      if OpenDialog1.Execute then
      begin
        strm:=TMemoryStream.Create;
        try
          strm.LoadFromFile(OpenDialog1.FileName);
          try
            Image1.Picture.Bitmap.LoadFromStream(strm);
          except
            try
              strm.Position:=0;
              jpg:=TJPEGImage.Create;
              jpg.LoadFromStream(strm);
              Image1.Picture.Assign(jpg);
            except
            end;
          end;
        finally
          FreeAndNil(strm);
          FreeAndNil(Jpg);
        end;
      end;
    end;
    最好有个变量保存当前stream是bmp还是jpg
      

  2.   

    哦,错了一下
    var strm:TMemoryStream;
        jpg:TJpegImage;
    begin
      if OpenDialog1.Execute then
      begin
        strm:=TMemoryStream.Create;
        try
          strm.LoadFromFile(OpenDialog1.FileName);
          try
            Image1.Picture.Bitmap.LoadFromStream(strm);
          except
            try
              strm.Position:=0;
              jpg:=TJPEGImage.Create;
              jpg.LoadFromStream(strm);
              Image1.Picture.Assign(jpg);
            finally
              FreeAndNil(Jpg);//free改在这里
            end;
          end;
        finally
          FreeAndNil(strm);
        end;
      end;
    end;
      

  3.   

    procedure TeditionForm.Button1Click(Sender: TObject);
    var
      myjpg:Tjpegimage;
      mystream:Tmemorystream;
    begin
      try
         if opendialog1.Execute then
         begin
            myjpg:=Tjpegimage.Create;
            try
               image1.Picture.LoadFromFile(opendialog1.FileName);
               myjpg.Assign(image1.Picture.Graphic);
               mystream:=Tmemorystream.Create;
               myjpg.SaveToStream(mystream);
               mystream.Position:=0;           datform.Qedition.Close;
               datform.Qedition.SQL.Clear;
               datform.Qedition.SQL.Add('select * from edition where e_id='+quotedstr(inttostr(e_id))+' order by e_id');
               datform.Qedition.Open;
               datform.Qedition.Edit;           tblobfield(datform.Qedition.FieldByName('e_img')).LoadFromStream(mystream);
               datform.Qedition.Post;           showmessage('录入成功!');
               myjpg.Free;
            except
               myjpg.Free;
               showmessage('录入失败!');
               exit;
            end;
         end;
      except
           myjpg.Free;
           showmessage('图相录入失败!');
           exit;
      end;
    end;
      

  4.   

    procedure TeditionForm.DBGrid1CellClick(Column: TColumn);
    var
      myjpg:Tjpegimage;
      mystream:Tmemorystream;
    begin
      try
         label55.Caption:='你现在查看的款号是:'+datform.Qedition.FieldValues['e_office'];
         myjpg:=Tjpegimage.Create;
         mystream:=Tmemorystream.Create;     tblobfield(datform.Qedition.FieldByName('e_img')).SaveToStream(mystream);
         mystream.Position:=0;
         myjpg.LoadFromStream(mystream);
         image2.Picture.Assign(myjpg);     clipboard.Assign(myjpg);
         myjpg.Free;
      except
         showmessage('图相出错');
         myjpg.Free;
         exit;
      end;