bmp格式的图片没出什么问题但是jpg格式的文件就不行 uses jpeg了还不行
请高手指点下

解决方案 »

  1.   

    uses jpeg;
    procedure TForm1.Button1Click(Sender: TObject); //插入圖片過程
    var
    testStream:TMemoryStream;
    begin
      try
        testStream := TMemoryStream.Create; //創建內存流
        Image1.Picture.Graphic.SaveToStream(testStream);  //將圖片保存至內存流中
        adoquery1.Close;
        adoquery1.SQL.Clear;
        adoQuery1.SQL.Add('Insert into test (id,photo) values (:id,:photo)'); //進行插入操作
        adoquery1.Parameters.ParamByName('id').Value := '003';
        adoQuery1.Parameters.ParamByName('photo').LoadFromStream(testStream,ftBlob); //讀取保存的內存圖
        adoquery1.ExecSQL;
      finally
        testStream.Free;   //釋放內存流
      end;
    end;
      

  2.   

    procedure TForm1.Button2Click(Sender: TObject); //讀取圖片過程
    var
    mStream:TMemoryStream;
    JpgFile:TjpegImage;
    begin
      if not ADOQuery1.FieldByName('photo').IsNull then begin ;
      mStream:=TMemoryStream.Create ;
      JpgFile:=TjpegImage.Create ;
      TBlobField(ADOQuery1.FieldByName('photo')).SaveToStream(mStream);  //顯示的轉換為BlobFiled並保存至內存流
      mStream.Position :=0;
      jpgfile.LoadFromStream(MStream);
      image2.Picture.Assign(JpgFile);
      end
      else begin
      image2.Picture :=nil;
      end;
    end;
      

  3.   

    放一个按钮  作为选择图片  在选择之后的同时也保存了图片 代码:
    procedure TForm_xgdl.Button2Click(Sender: TObject);
    var
      bmp1:TBitmap;
      jpg1:TJpegImage;
    begin
    with od do
       begin
        filter:='*.jpg,*.bmp';
        if od.Execute then
        begin
         bmp1:=Tbitmap.Create;
         jpg1:=Tjpegimage.Create;
         try
         jpg1.LoadFromFile(od.FileName);
         bmp1.Assign(jpg1);
         adoquery1.Edit;
         adoquery1.FieldByName('zp').Assign(bmp1);//存图片
         adoquery1.FieldByName('zpid').AsString:=dbedit1.Text;//图片的名字
         adoquery1.Post;
         finally
          jpg1.Free;
          bmp1.Free;
         end;    dbedit1.Text:=od.FileName;//图片的名字
       end;
      end;  
    end;
      

  4.   

    TO:xiaotao2004(小陶) 
    存到数据库好象可以,不过还是取不出来,不能显示到IMAGE2 procedure TForm1.Button2Click(Sender: TObject); //讀取圖片過程
    ………
      if not ADOQuery1.FieldByName('photo').IsNull then begin ; 这个什么意思?
    ……
     我把这个读取图片这段代码粘贴上去好象显示不出来,报错了
    是不是ADOQUERY1还要写写SQL 语句?
    高手指点一下
      

  5.   

    ADOQuery1.Close;
      ADOQuery1.SQL.Text:='SELECT * FROM test';   // 查询图片
      ADOQuery1.Open;接着
    if not ADOQuery1.FieldByName('photo').IsNull then begin ; 这个什么意思?
      

  6.   

    你不会直接用上面的代码吧,第个存入的时候好象掉了一句:textStream.position:=0;加上这句试试看!
      

  7.   

    保存图片时可以判断一下
    ////保存图片//////
    var
      MS_JpegStream:TMemoryStream;
      M_BitMap:TBitMap;
      M_Jpeg:TJpegImage;
    begin
    ..........
      if  OpenPictureDialog1_checked then
      begin
        try
          MS_JpegStream:=TMemoryStream.Create;
          M_BitMap:=TBitMap.Create;
          M_Jpeg:=TJpegImage.Create;
          if DBImage1.picture.graphic is Tbitmap then
            begin
              M_BitMap.LoadFromFile(OpenPictureDialog1.FileName);
              M_Jpeg.Compress;
              M_Jpeg.Assign(M_BitMap);
            end
          else if DBImage1.picture.graphic is Tjpegimage then
            begin
              M_Jpeg.LoadFromFile(OpenPictureDialog1.FileName);
            end;
          M_Jpeg.SaveToStream(MS_JpegStream);
            with SQLQuery1 do
              begin
                Close;
                SQL.Clear;
                SQL.Text:='insert into zjzp(zjbh,zp) values(:zjbh,:zp)' ;
                ParamByName('zjbh').AsString:=trim(Edit10.Text); //zjbh
                ParamByName('zp').LoadFromStream(MS_JpegStream,ftblob); //zp
                ExecSQL(False);
              end
        finally
          MS_JpegStream.Free;
          M_BitMap.Free;
          M_Jpeg.Free;
        end;
      end; //if  OpenPictureDialog1_checked then
      

  8.   

    ///读取图片///
    var
      MS_JpegStream:TMemoryStream;
    begin
    ..........
          SQLQuery1.Active:=false;
          SQLQuery1.SQL.Clear;
          SQLQuery1.SQL.Text:='select * from  zjzp where zjbh=:zjbh' ;
          SQLQuery1.ParamByName('zjbh').AsString:=trim(Edit11.Text); //zjbh
          SQLQuery1.Active:=True;
          SQLQuery1.First;
          if not SQLQuery1.Eof then
            begin        if SQLQuery1.FieldByName('zp').IsNull then
              begin
                DBImage1.Picture.Bitmap.Assign(nil);
              end
            else
              begin
                try
                  MS_JpegStream:=TMemoryStream.Create;
                  (SQLQuery1.FieldByName('zp') as tblobfield).savetostream(MS_JpegStream);
                  DBImage1.Picture.Graphic:=nil;
                  DBImage1.Picture.Graphic:=TJpegImage.Create;
                  MS_JpegStream.Position:=0;
                  DBImage1.Picture.Graphic.LoadFromStream(MS_JpegStream);
                finally
                  MS_JpegStream.Free;
                end;
              end;        end
          else
            DBImage1.Picture.Bitmap.Assign(nil);
          SQLQuery1.Active:=false;
      

  9.   

    为什么我用DELPHI按照上面介绍的方法从SYBASE数据库中取BMP图象(700多K一张,存储在一个字段内)时只能取出一部分(32K),这个问题应该怎么解决?
    如哪位高手能不吝赐教,将万分感激!