代码:
var Ms:TmemoryStream;
Jpg:tjpegimage;
begin
  if OpenPictureDialog1.Execute then
  begin
    ms:=TmemoryStream.Create;
    try
      Image2.Picture.LoadFromFile(OpenPictureDialog1.FileName);
      Jpg := TjpegImage.Create;
      Jpg.Assign(Image2.Picture.Graphic);
      Jpg.SaveToStream(Ms) ;
      Ms.Position :=0;
      qryMaster.Edit;
      TBlobField(qryMaster.FieldByName('Pic2')).LoadFromStream(Ms);
    finally
      Ms.Free ;
      Jpg.Free;
    end;
在选择图片后运行到行:TBlobField(qryMaster.FieldByName('Pic2')).LoadFromStream(Ms);
出异常:“Bitmap image is not valid”
请问这是为什么,怎样解决呢?

解决方案 »

  1.   

    你选择的不是jpg文件,你上面的代码只能够处理jpg文件,而你运行时选择的是bmp文件。
      

  2.   

    参看http://www.7880.com/Info/Article-20ddb240.html
    http://www.xoeo.com/htmldata/2004_12/1/article_31279_1.html
    http://www3.ccw.com.cn/club/essence/200310/19110.htm上面信息足够了http://lysoft.7u7.net
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      fileStr : TfileStream;
      st1 : Tstringstream;
    begin
      if OpenPictureDialog1.Execute then
      begin
        try
          st1:=Tstringstream.Create('');
          fileStr:= TfileStream.Create(OpenPictureDialog1.FileName,fmOpenRead );
          st1.CopyFrom(filestr,filestr.Size);
          qryMaster.Edit;
          TBlobField(qryMaster.FieldByName('Pic2') as TBlobField).LoadFromStream(st1);
        finally
          freeandnil(fileStr);
          freeandnil(st1);
        end;
      end;
    end;
      

  4.   

    rocedure TMain_Form.BMPSaveToJPG(sBMPFile :string);//对于bitmap,调用这个过程生成一个同路径下的jpg文件,再用你的代码存.
    var
      B: TBitmap;
      jp: TJpegImage;
    begin
        jp := TJpegImage.Create;
        try
          with jp do
          begin
            try
                B := TBitmap.Create ;
                B.LoadFromFile(trim(sBMPFile));
                Assign(B);
                savetofile(sBMPFile+'.jpg');
            finally
                B.free ;
            end;
          end;
        finally
          jp.Free;
        end;
     end;