新年快乐,年前最后一个问题,200分悬赏,有关超大图片的打印问题。难死思归等五星级高手哟

nga96 2005-02-04 02:33:11
这个问题困了我半年,估计只能拖到年后解决了。现200分悬赏高手求解。

客户需求如下:有一张超大的BMP图片,A4纸相当于50页吧,要求打印出来。

打印我做过,于是打那图片读入到内存中,先分好页,然后一页一页打。这些偶都会。

问题是:将图片读入内存大约耗了我50M的内存,这个可以接受。可是,打印时,发现每打印一页,就又要消耗40M内存,这样,当打印到20页时,就耗了1G的内存了,死机啦。

于是偶进行了跟踪,发现在打印事件中,对PrintDocument画图时,调用e.graphics.drawimage()方法时,要消耗40M内存。这样,当客户连续打印时,肯定要死机的。偶于是怀疑是否每打印一页时是否要释放资源,可是试了好几次dispose()方法,发现就是不能释放内存,哭。非得等程序退出时才释放。

难道 Graphics.Drawimage()方法在画BMP时处理不好?
...全文
380 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
nga96 2005-02-18
  • 打赏
  • 举报
回复
经过严格测试,发现不是drawimage方法的问题,而是别的问题,可是,是什么问题却没有查出来。
继续努力中,谢谢各位啦。
nga96 2005-02-12
  • 打赏
  • 举报
回复
楼上的,我试过了,每次dispose()后不行,内存不会释放
lastbelial 2005-02-12
  • 打赏
  • 举报
回复
您的问题"不能释放内存",其实是打印流的大小问题.是不可能释放的,除非您取消打印作业.
lastbelial 2005-02-12
  • 打赏
  • 举报
回复
您的BMP图一定是彩色的,打印文件过大是因为图形文件的格式造成的.因为位图文件在每一个点都需要大量的数据说明它的颜色,但矢量图形没有这种缺点.
lastbelial 2005-02-12
  • 打赏
  • 举报
回复
如果你的打印机支持的话,您试试做成一个打印文件再打印(打印到文档),这样您内存的占用会转移到您的硬盘空间上.不行的话您只有请教"袁峰"了.他是最PRO的.我也在看他的书.
lastbelial 2005-02-07
  • 打赏
  • 举报
回复
是因为您没有释放您创建的对象,所以会不断地累加下去。
bmp=new Bitmap("您的图形名称");
bmp.Dispose();
FengYuanMSFT 2005-02-05
  • 打赏
  • 举报
回复
Can you show your code, or just a simplified version of it which can demonstrate the problem?

To solve your original problem, you need to figure out who is holding those memory. UMDH is a good tool for such analysis.

To avoid such problem, you can just print using GDI directly.
fengyecsdn 2005-02-05
  • 打赏
  • 举报
回复
我觉得 应该从打印机那里下手吧

看来要专门进行打印机的打印队列操作。
这不能一概用MS的东西了 要考虑个大概机型,看它的缓存、打印速度、响应等等了。
我的看法是针对打印机,(可以针对打印机系列作,不是对每个型号)
我觉得如果用MS的通用类 恐怕你的问题难解决
cthiro123 2005-02-05
  • 打赏
  • 举报
回复
up
Jouzen 2005-02-05
  • 打赏
  • 举报
回复
我觉得可以分成两步
1,先把大图切成50个小图
2,再连续打印小图
wj2929 2005-02-05
  • 打赏
  • 举报
回复
gz
zr1982930 2005-02-05
  • 打赏
  • 举报
回复
绝对BT的BOSS!
zr1982930 2005-02-05
  • 打赏
  • 举报
回复
绝对BT的问题!
hawk234 2005-02-05
  • 打赏
  • 举报
回复
up
v192 2005-02-05
  • 打赏
  • 举报
回复
GZ
saucer 2005-02-05
  • 打赏
  • 举报
回复
FengYuanMSFT(袁峰 www.fengyuan.com) 是微软GDI方面的大家,你把编码贴出来,他应该能帮你

saucer 2005-02-05
  • 打赏
  • 举报
回复
>>>这个问题困了我半年

我没怎么用过winform里的GDI+,所以不是很清楚你的问题所在,听上去是内存+垃圾回收问题

不过,如果一定要通过写编码解决的话,是否可以这么做,BMP的文件格式应该哪里都能找到,能否自己写编码读BMP的数据,只读进对应一页的图案,然后打印呢?
windinwing 2005-02-05
  • 打赏
  • 举报
回复
现在怎么都玩英文,流行么?
phoubes 2005-02-04
  • 打赏
  • 举报
回复
我觉得把数据一块一块读进来打印会好一些吧~~不要一下子都读进来
程序的色彩 2005-02-04
  • 打赏
  • 举报
回复
接分成吗?呵呵.GZ.UP
加载更多回复(26)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧