我猜你可能正在做类似这样的事情:
我猜测您正在做以下工作:
Bitmap bitmap = new Bitmap (filename of jpeg);
然后执行:
OnPaint (...)
{
Graphics g = ....;
g.DrawImage (bitmap, ...);
}
每次绘制时,这将调整巨大的JPEG图像大小以适应屏幕显示。我猜测您的JPEG大小约为2500x2000像素。将JPEG加载到位图中时,位图加载代码会解压缩数据并将其存储为RGB数据格式,以便易于呈现(即与显示器相同的像素格式)或作为称为设备无关位图(也称为DIBitmap)的东西。这些位图需要比压缩的JPEG更多的RAM来存储。
您当前的实现已经在进行格式转换和调整大小,但是以一种低效的方式进行,即每次呈现时将巨大的图像缩小到屏幕大小。
理想情况下,您希望加载图像并将其缩小。 .Net有一个系统可以做到这一点:
Bitmap bitmap = new Bitmap (filename of JPEG);
Bitmap thumbnail = bitmap.GetThumbnailImage (width, height, ....);
bitmap.Dispose (); // this releases all the unmanged resources and makes the bitmap unusable - you may have been missing this step
bitmap = null; // let the GC know the object is no longer needed
在这里,width和height是所需缩略图的尺寸。但是,这可能会产生不太理想的图像(但如果存在任何嵌入式缩略图数据,它将使用它们以加快速度),如果这种情况发生,请执行位图->位图调整大小。
创建PDF文件时,您需要重新加载JPEG数据,但从用户的角度来看,这是可以接受的。我相信只要您有一些反馈告诉用户正在处理数据,用户就不会介意等待短暂的时间将其导出为PDF。您还可以在后台线程中执行此操作,让用户在另一个拼贴上工作。