我动态加载一个图片,这个图片可能很多大约十几M源码如下:
  Stream:=TMemoryStream.Create;
  Stream.LoadFromFile(PicName);
     Jpg:=TJPEGImage.Create;
     try       Jpg.LoadFromStream(stream);
       Image1.Stretch:=false;
       //image1.Left:=0;
       //image1.Top:=0;
       Image1.Height:=jpg.Height;
       Image1.Width:=jpg.Width;
       Image1.Picture.Assign(jpg);
       Image1.BringToFront;
       Image1.Visible:=true;
     finally
         Jpg.Free;
     end;这样如果图片很大的话加载很慢,有没有办法能让图片加载快点。请给个思路或者给段代码

解决方案 »

  1.   

    先导入到内存再显示
    放个进度条
    var
    BufBit                 :array [0..255]of Byte;
    F                      :File;
    Stream                 :TMemoryStream;
    NumRead                :Integer;
    begin
    AssignFile(F,PICPath);
    Seek(F,0);Progress.Max:=FileSize(F); //进度条初始化
    Progress.Position:=0;Stream:=TMemoryStream.Create; //MemoryStream初始化
    Stream.SetSize(FileSize(F));
    Stream.Seek(0,soFromBeginning);repeat  //读入内存
       BlockRead(F,BufBit,sizeof(BufBit),NumRead);
       Stream.Write(BufBit,sizeof(BufBit));
       Progress.Position:=FilePos(F);
    until NumRead = 0;Stream.Position:=0;JPEGImage := TJPEGImage.Create;
    JPEGImage.LoadFromStream(Stream);Stream.Clear;
    Stream.Free;
    CloseFile(F);
    end;
      

  2.   

    不好意思,没做测试
    重写了一个
    uses JPEG  //引用JPEG单元
    ProgressBar1: TProgressBar; //进度条
    OpenDialog1: TOpenDialog; //打开文件对话框
    Button1: TButton;  //按钮
    ///////////////////////////////////////////////////////////////////////
    procedure TForm1.Button1Click(Sender: TObject);
    var
    BufBit   :array [0..255]of Byte;
    F        :File;
    Stream   :TMemoryStream;
    NumRead  :Integer;
    JPEGImage:TJPEGImage;
    begin
    if not OpenDialog1.Execute then exit;
    AssignFile(F,OpenDialog1.FileName);  //打开JPG文件
    Reset(F,1);
    Seek(F,0);ProgressBar1.Max:=FileSize(F); //进度条初始化
    ProgressBar1.Position:=0;Stream:=TMemoryStream.Create; //MemoryStream初始化
    Stream.SetSize(FileSize(F));
    Stream.Seek(0,soFromBeginning);repeat  //读入到内存
       BlockRead(F,BufBit,sizeof(BufBit),NumRead);
       Stream.Write(BufBit,sizeof(BufBit));
       ProgressBar1.Position:=FilePos(F);
    until NumRead = 0;
    CloseFile(F);Stream.Position:=0;JPEGImage := TJPEGImage.Create;    //建立JPEG对象
    JPEGImage.LoadFromStream(Stream);  //复制内存到JPEG对象Stream.Clear;
    Stream.Free;   //清理内存self.Canvas.StretchDraw(self.Canvas.ClipRect,JPEGImage); //显示在Form布景上
    JPEGImage.Free; //释放JPEG对象
    end;