注:是jpg,不是bmp

解决方案 »

  1.   

    这里有两个过程,是显示和保存图片的。数据库是access,参数调用如下。
    showpicture(image3, Dm1.ADOQ_zyryjbqk, 'zp');
    savepicture(image1, Dm1.ADOQ_qyjbqk, 'yyzzsmj');
    第一个是image的名字,第二个是数据源,第三个是存图片字段名。
    请参考。procedure showpicture(img: Timage; ADOQ: TADOQuery; field: string);
    var MS: Tmemorystream;
    begin
      if not ADOQ.FieldByName(field).isnull then
        begin
          MS := TMemoryStream.Create;
          try
            TBlobField(ADOQ.FieldByName(field)).SaveToStream(MS);
            MS.Position := 0; //注意
            try
              img.Picture.Graphic.LoadFromStream(MS);
            except
              //如果格式无效,则显示默认图片
              on EInvalidGraphic do
              //img.Picture.Graphic := fmain.Image4.Picture.Graphic;
            end;
          finally
            MS.Free;
          end;
        end
      else
        begin
          MS := TMemoryStream.Create;
          try
            fmain.Image4.Picture.Graphic.SaveToStream(MS);
            MS.Position := 0; //注意
            img.Picture.Graphic.LoadFromStream(MS);
          finally
            MS.Free;
          end;
        end;
    end;procedure savepicture(img: Timage; ADOQ: TADOQuery; field: string);
    var photo: Tmemorystream;
    begin
       photo := Tmemorystream.create;
       img.Picture.graphic.savetoStream(photo);
       Tblobfield(ADOQ.FieldByName(field)).loadfromstream(photo);
       photo.Clear;
    end;
      

  2.   

    procedure TForm1.btnLoadImageClick(Sender: TObject);
    var
      sFileName : string;  function BlobContentToString(const AFileName : string) : string;
      begin
        with TFileStream.Create(AFileName, fmOpenRead) do
        try
          SetLength(Result, Size);
          Read(Pointer(Result)^, Size);
        finally
          Free;
        end;
      end;begin
      if OpenDialog1.Execute then
      begin
        sFileName := OpenDialog1.FileName;
        with ADOTable1 do
        begin
          Open;
          Insert;
          FieldByName('Name').AsString := Edit1.Text;
          FieldByName('Photo').AsString := BlobContentToString(sFileName);
          Post;
        end;
      end;
    end;procedure TForm1.btnShowClick(Sender: TObject);
    var
      BS : TADOBlobStream;
      JpegImage : TJpegImage;
      sFileName : string;
    begin
      JpegImage := TJpegImage.Create;
      BS := TADOBlobStream.Create(TBlobField(ADOTable1.FieldByName('Photo')), bmRead);
      try
        JpegImage.LoadFromStream(BS);
        Image1.Picture.Assign(JpegImage);
        sFileName := ExtractFilePath(Application.ExeName) + 'tmpBlob';
        sFileName := sFileName + '.jpg';
        BS.SaveToFile(sFileName);
        //OleContainer1.CreateObjectFromFile(sFileName, False);
        //Image1 := TImage.Create(Self);
        //Image1.Picture.Graphic.LoadFromStream(BS);
      finally
        JpegImage.Free;
        BS.Free;
      end;
    end;