参考下我下面写的代码:uses Jpeg; const DiskJpegFile = 'DSC_0050.JPG';var Bmp: TBitmap;// 实用函数 - 把磁盘 Jpeg 图形 加载到 Bmp 对象中 procedure LoadJpeg2Bmp(JpgFile:AnsiString; Bmp: TBitmap);var JpgImage: TJpegImage;begin if not Assigned(Bmp) then exit; if FileExists(JpgFile) then begin JpgImage := TJpegImage.Create; try JpgImage.LoadFromFile(JpgFile); Bmp.SetSize(JpgImage.Width, JpgImage.Height); Bmp.Canvas.Draw(0, 0, JpgImage); finally JpgImage.Free; end; end;end;// 按钮按下: 把 Jpeg 图形 转移到 BMPprocedure TForm1.Button1Click(Sender: TObject);begin if FileExists(DiskJpegFile) then begin if Assigned(Bmp) then Bmp.Free; Bmp := TBitmap.Create; LoadJpeg2Bmp(DiskJpegFile, Bmp); end;end;// 按钮按下: 画 BMP 图形到 Form 上显示procedure TForm1.Button2Click(Sender: TObject);begin if not Assigned(Bmp) then exit; Canvas.StretchDraw(ClientRect, Bmp);end;上面代码演示类似效果,并解答你内存占用的问题。在 Jpeg 文件从磁盘加载到 TJpegImage 对象中时,由于没有执行解码操作,内存不会突然上升,只有当Jpeg图形画到Bmp时,才发生30M左右的大内存使用,当用完后,你只要释放 Jpeg对象,内存就自然恢复到一个很小的值了。