一个奇怪的问题
我先判断Image上图片的格式是 JPG 或Bmp;变量JpgorBmp表示图像的格式,为1时,JPG,0时,bmp.
再将Image上的图片存入数据库中,不改变图形格式,即JPG保存为JPG,Bmp还保存成bmp
数据库有两个字段.图片名称,图片(保存图片).procedure TForm1.Button2Click(Sender: TObject);
var
     pmem:TADOBlobStream;
     pField:TBlobField;
     jp:TJPEGImage;
     bp:TBitMap;
begin
     //JpgorBmp为Image上的图片格式,1表jpg,2表bmp.
     //此时Image1上的图片格式是JPG格式,
     if(JpgorBmp=1) then
     begi
        jp:=TJpegImage.Create;
        jp.Assign(Image1.Picture.Graphic);
     end;
     //此时Image1上的图片格式是BMP格式,
     if(JpgorBmp=2)  then
     begin
bp:=TBitmap.Create;
        bp.Assign(Image1.Picture.Graphic);
     end;
 
     //插入数据
     self.ADOTable1.Insert;
     self.ADOTable1.FieldByName('图片名称').AsString:=self.Edit1.Text; //
     pField:=TBlobField(self.ADOTable1.FieldByName('图片'));
     pmem:=TADOBlobStream.Create(pField, bmReadWrite);
     pmem.Seek(0,soFromBeginning);
     if(JpgorBmp=1)  then
     begin
      jp.SaveToStream(pmem);
        pmem.Position:=0;
        jp.Free;
        pmem.Free;
        self.ADOTable1.Post;
     end;
     if(JpgorBmp=2)  then
     begin
      bp.SaveToStream(pmem);
        pmem.Position:=0;
        pmem.Free;
        bp.Free;
self.ADOTable1.Post;
     end;
end;下面的程序问题是:
1:当Image载入jpg文件时,这一切都正常
2:当Image上load的Bmp的文件大小 小于1M时,一切正常.*****
3:当Image上load的Bmp的文件大小 大于1M时,无法正常保存图片,出现异常.*****当Image上load的Bmp的文件大小 大于1M时,无法正常保存图片,出现异常?
奇怪,到底是怎么回事???

解决方案 »

  1.   

    插入数据改一下:
    var
      MemStrm: TMemoryStream;
    begin
      ADOTable1.Insert;
      ADOTable1.FieldByName('图片名称').AsString := Edit1.Text; //
      MemStrm := TMemoryStream.Create;
      try
        if (JpgorBmp = 1) then
          jp.SaveToStream(MemStrm)
        else if (JpgorBmp = 2) then
          bp.SaveToStream(MemStrm);
        MemStrm.Position := 0;
        TBlobField(self.ADOTable1.FieldByName('图片')).LoadFromStream(MemStrm);
      finally
        MemStrm.Free;
      end;
      ADOTable1.Post;
    end;