ADOQuery1中的Graph字段(Blob类型)用来存储图片 在录入界面上 要求通过Navigator逐一 显示图片,选择图片,存储图片。  为什么用DBImage控件不能显示呢什么方法能实现显示图片 选择图片 存储图片呢?谢谢!!!

解决方案 »

  1.   

    不是太理解,感觉你这个问题要自己动手去写了,好象不能通过Navigator要完成浏览功能!TDBImage可以显示图片的,不过他能显示数据库图片,不能浏览硬盘图片.
      

  2.   

    用Image自己来写一个吧.那样更加方便.灵活性也强些..
      

  3.   

    DBImage 对很多图片的格式不支持,建议你自己取出来放在Image里面,或者自己存的时候转一下。
    DBImage(对bmp的支持,对Jpg的就不支持。)
      

  4.   

    自已写代码;把图片从数据库中读出来,存到一个流中,然后用Tjpeimage对象来访问这个流,并获得数据,接着用image.picture.loadfromstream()就可以了;
      

  5.   

    tempStream:TMemoryStream;
    begin
       tempStream:=TMemoryStream.Create; // 创建内存流
       tempStream.clear;
       if ADOQuery1.FieldByName('GRAPH').Value<>'' then //如果该字段不为空,则显示图片
       begin
       try
       TBlobField(ADOQuery1.FieldByName('GRAPH')).SaveToStream(tempStream);
       Image1.Picture.Bitmap.LoadFromStream(tempStream);
       finally
       tempStream.Free;
    请大虾帮忙看看这段代码有什么问题吗? 数据好像取不出来
      

  6.   

    var
      SqlStr, temp: string;
      tempStream: TStream;
      pig: TJPEGImage;
     begin
          Query1.Close;
          Query1.SQL.Clear;
          SqlStr:= 'select * from ITEMIMAGE where ITE_CODE='''+DataSource1.DataSet.FieldByName('ITE_CODE').AsString+'''';
          Query1.SQL.Add(SqlStr);
          Query1.Open;
          Image2.Picture.Bitmap.Assign(nil);
          Image2.Visible:=false;
          Image2.Visible:= true;
          pig:=TJPEGImage.Create;
          while not Query1.Eof do
            begin
              tempStream:=Query1.CreateBlobStream(Query1.FieldByName('ITE_IMAGE'),bmRead);
              try
                pig.LoadFromStream(tempStream);
                Image2.Picture.Bitmap.Assign(pig);
              except
              end;
                Query1.Next;
                tempStream.Destroy;
            end;
          Query1.Close;
          pig.Destroy;
        end;供你参考一下。
      

  7.   

    tempStream:TMemoryStream;
    begin
       tempStream:=TMemoryStream.Create; // 创建内存流
       tempStream.clear;
       if ADOQuery1.FieldByName('GRAPH').Value<>'' then //如果该字段不为空,则显示图片
       begin
       try
       TBlobField(ADOQuery1.FieldByName('GRAPH')).SaveToStream(tempStream);
       Image1.Picture.Bitmap.LoadFromStream(tempStream);
       finally
       tempStream.Free;
    请大虾帮忙看看这段代码有什么问题吗? 数据好像取不出来
    你上面的这个只是把图片转化为数据流,而没有把它变为图像格式的。你还要创建一个TJPEGImage对象才行。然后把数据流转化过来。
      

  8.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      tempstream:TStringStream;
      tempjpeg:TJPEGImage;
    begin
      try
        tempstream:=TStringStream.Create(' ');
        TBlobField(ADOQuery1.FieldByName('pic')).SaveToStream(tempstream);
        tempstream.Position:=0;
        tempjpeg:=TJPEGImage.Create;
        tempjpeg.LoadFromStream(tempstream);
        Image1.Picture.Bitmap.Assign(tempjpeg);
      finally
        tempstream.Free;
        tempjpeg.Free;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var 
      MyJPEG : TJPEGImage;
      MS: TMemoryStream;
    begin
      MyJPEG := TJPEGImage.Create;
      try
        with MyJPEG do
        begin
          Assign(Image1.Picture.Graphic);
          MS:=TMemoryStream.create;
          SaveToStream(MS);
          MS.Position:=0;
          ADOQuery1.Edit;
          TBlobField(ADOQuery1.FieldbyName('pic')).LoadFromStream(MS);
          ADOQuery1.Post;
          messagebox(getactivewindow(),'图像保存完毕!','保存',mb_ok);
        end;
      finally
        MyJPEG.Free;
      end;
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      if opendialog1.Execute then
        Image1.Picture.LoadFromFile(opendialog1.FileName);
    end;
    procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
    var
      tempstream:TStringStream;
      tempjpeg:TJPEGImage;
    begin
      try
        tempstream:=TStringStream.Create(' ');
        TBlobField(ADOQuery1.FieldByName('pic')).SaveToStream(tempstream);
        tempstream.Position:=0;
        tempjpeg:=TJPEGImage.Create;
        tempjpeg.LoadFromStream(tempstream);
        Image1.Picture.Bitmap.Assign(tempjpeg);
      finally
        tempstream.Free;
        tempjpeg.Free;
      end;
    end;