DBGridEh图片显示优化

以前已经说过怎么在DBGridEh里面显示图片,还有怎么让图片更清晰,但是碰到数据量比较大和图片特别大的情况下就会卡死,一般有两种方案,一种是异步加载图片,保证主程序不会被卡住,一种是把图片加载到缓存里面,我是用图片加载到缓存里面
1.先定义一个变量存储图片FImageList: TDictionary<String, TMemoryStream>;
2.在create或者show事件里面创建变量FImageList := TDictionary<String, TMemoryStream>.Create;
3.在DrawColumnCell事件里面添加这些代码,这样速度就快很多了

procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
var
  ProNo: String;
  jpeg: TDBImageEh;
  FileName: String;
  size: Integer;
  MemStream, Stream: TMemoryStream;
begin
  if (Column.FieldName = 'IMG') and (Column.Field <> NIL) then
  begin
    size := 100;
    ProNo := MemTableEh1.FieldByName('ProNo').AsString;
    if FImageList.ContainsKey(ProNo) then
    begin
      jpeg := TDBImageEh.Create(nil);
      jpeg.PicturePlacement := ipStretchEh;
      FImageList[ProNo].Position:=0;
      jpeg.Picture.LoadFromStream(FImageList[ProNo]);
    end
    else
    begin
      MemStream := TMemoryStream.Create;
      jpeg := TDBImageEh.Create(nil);
      jpeg.PicturePlacement := ipStretchEh;
      MakeThumbnailImage(ExtractFilePath(ParamStr(0)) + 'A1.jpg',size,size,jpeg.Picture,True);
      jpeg.Picture.Graphic.SaveToStream(MemStream);
      MemStream.Position := 0;
      FImageList.Add(ProNo, MemStream);
    end;
    DBGridEh1.Canvas.StretchDraw(Rect, jpeg.Picture.Graphic);
    jpeg.Free;
  end;
end;

主要原理就是避免不停的去加载存储的图片,MakeThumbnailImage过程是提高图片清晰度的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值