在数据库中采用image存储,如果是BMP类型的直接用DBIMAGE就能显示,
但如果是JPG类型的就显示不出来!
看了许多帖子,有用IMAGE显示的!
image1.Picture.Bitmap.Assign(TBlobField(dm.ClassMateQuery.FieldByName('pic')));
image1.Picture.Assign(TBlobField(dm.ClassMateQuery.FieldByName('pic')));不知道什么区别,我试了都不行!
还有下面这样的
var
  jpg : Tjpegimage;
  x : Tmemorystream;
begin
   jpg := Tjpegimage.Create;
   x := Tmemorystream.Create;
   
   TBlobField(dm.ClassMateQuery.FieldByName('pic')).SaveToStream(x);
   jpg.LoadFromStream(x);
   jpg.SaveToFile('e:\temp\test.jpg');   image1.Picture.Assign(jpg);
   jpg.Free;
   x.Free;
end;我试了也不行!
请问JPG格式的如何显示出来!

解决方案 »

  1.   


    TBlobField(dm.ClassMateQuery.FieldByName('pic')).SaveToStream(x);
       x.Position := 0;/////你再试试
       jpg.LoadFromStream(x);
       jpg.SaveToFile('e:\temp\test.jpg');
      

  2.   

    procedure TForm1.DBGrid1DblClick(Sender: TObject);
    var
    JPG:TJPEGImage;
    MS:TMemoryStream;
    begin
      JPG:=TJPEGImage.Create ;
      MS:=TMemoryStream.Create ;
      TBlobField(ADOTable1.FieldByName('zp')).SaveToStream(ms);
      ms.Position :=0;
      JPG.LoadFromStream(ms);
      IMage1.Picture.Assign(JPG);
      Form2.Image1.Picture.Assign(JPG);
    end;
      

  3.   

    TBlobField(table.fileds[0]).savetofile(filename);
      

  4.   

    uses
       Jpgevar
     strm:tadoblobstream;
     jpegimage:tjpegimage;strm := tadoblobstream.Create(tblobfield(ADOQuery1.fieldbyname('img_Filecontent')),bmread); 
     //从你数据库里取出JPG图片。img_Filecontent--存入图片的字段jpegimage := tjpegimage.Create ;
    jpegimage.LoadFromStream(strm);
    image1.Picture.Graphic := jpegimage;
      

  5.   

    bmp格式得很容易,jpg格式的我试过了也不行,很奇怪啊。
      

  6.   

    var
    JPG:TJPEGImage;
    MS:TMemoryStream;
    begin
      JPG:=TJPEGImage.Create ;
      MS:=TMemoryStream.Create ;
      TBlobField(ADOTable1.FieldByName('zp')).SaveToStream(ms);
      Ms.Position :=0;
      JPG.LoadFromStream(Ms);
      MS.Free ;
      IMage1.Picture.Assign(JPG);这个可以
      

  7.   

    if not FieldByName('PersonPicture').IsNull then
        begin
          try
            SheetPictureJPEG:=TJPEGImage.Create;
            SheetPictureJPEG.Assign(FieldByName('SheetPicture') );
            imageSheet.Picture.Graphic:=SheetPictureJPEG;
          finally
            SheetPictureJPEG.Free ;
          end;
        end;
      

  8.   

    出现JPEG ERROR #53的错误,已经USES JPEG;
      

  9.   

    我以前用过的,先把jpg图片保存到内存流中,然后保存到tjpgimage中,接着就可以直接用assign()来访问了
      

  10.   

    各位大哥的方法类似,我都试了全部出现JPEG ERROR #53的错误,请指教!
      

  11.   

    http://dev.csdn.net/Develop/article/19/19839.shtm
      

  12.   

    procedure TForm1.adoTable1AfterScroll(DataSet: TDataSet); //显示图像
    var
    strm:tadoblobstream;
    jpegimage:tjpegimage;
    bitmap:tbitmap;
    begin
    strm := tadoblobstream.Create(tblobfield(adotable1.fieldbyname('MYIMAGE')),bmread);
    try //try1
    strm.position :=0;
    image1.Picture.Graphic := nil; //清除图像
    // BMP、JPEG两种图像数据必需分别处理
    if adotable1.fieldbyname('isbmp').asstring ='1' then //BMP型图像数据
    begin //begin11
    bitmap := tbitmap.Create ;
    try //try11
    bitmap.LoadFromStream(strm);
    image1.Picture.Graphic := bitmap;
    finally
    bitmap.Free;
    end; //end try11
    end //end begin11
    else if adotable1.fieldbyname('isbmp').asstring ='0' then //JPEG型图像数据
    begin //begin12
    jpegimage := tjpegimage.Create ;
    try //try12
    jpegimage.LoadFromStream(strm);
    image1.Picture.Graphic := jpegimage;
    finally
    jpegimage.Free ;
    end; //end try12
    end; //end begin12
    finally
    strm.Free ;
    end; //end try1
    end;   如果你想将数据库中的图像导出到外部文件中可采用如下关键语句:
    image1.Picture.SaveToFile(FileName ); 
      

  13.   

    是不是我写入数据时不对阿!image类型可以放多大图片?
    我原先是这样写入数据库的
    with dm.adoquery1 do
      begin
      close;
      sql.Clear;
      sql.Add('insert into  classmate(name,email,phone,memo,pic) values(:h1,:h2,:h3,:h4,:h5)');
      parameters[0].Value := nameedit.Text;
      parameters[1].Value := emailedit.Text;
      parameters[2].Value := phoneedit.Text;
      parameters[3].Value := memo1.Text;
      parameters[4].Assign(image1.Picture);
      execsql;
      showmessage('保存成功');
      end;也用过这样的方式:
    var  mypicstream : Tadoblobstream;
    begin
      dm.ClassMateQuery.Edit;
      mypicstream := Tadoblobstream.Create(TBlobField(dm.ClassMateQuery.FieldByName('pic')),bmwrite);  With DM.ClassMateQuery DO
      Begin
        mypicstream.LoadFromFile(openpicturedialog1.FileName);
        mypicstream.Position := 0;
        edit;
        fieldbyname('name').AsString := nameedit.Text;
        fieldbyname('email').AsString := emailedit.Text;
        fieldbyname('phone').AsString := phoneedit.Text;
        fieldbyname('memo').AsString := memo1.Text;
        TBlobfield(fieldbyname('pic')).LoadFromStream(mypicstream);
        post;
        mypicstream.Free;
      end;但出错提示:BITMAP IMAGE IS NOT VALID读取我用下面的
    var
      strm : Tadoblobstream;
      pic : Tjpegimage;
    begin
      datasource1.DataSet.Last;
      strm := Tadoblobstream.Create(TBlobField(dm.ClassMateQuery.FieldByName('pic')),Bmread);
      strm.Position := 0;
      image1.Picture.Graphic := nil;
      pic := Tjpegimage.Create;
      pic.LoadFromStream(strm);
      image1.Picture.Graphic := pic;
      pic.Free;
      strm.Free;
    end;提示JPEG ERROR #42是不是写入方式不对造成的哪里错了,再次感谢大家
      

  14.   

    问题已经解决,以前放了dbimage,去掉就好了!