我先把截屏的照片放在本地硬盘中。然后 最后for把照片读取出来写入avi中。
但是如果照片过多的话 会导致内存不足。。
我的代码
// al是个arrayList 里面放在图片存放的地址
for (int i = 0; i< al.Count;i++){
// 取出图片
Bitmap bm = new Bitmap(Image.FromFile(al[i].toString()));
添加帧 写入avi
aviWriter.AddFrame(bm);
}
19 个解决方案
#1
分段读取
不要一次性for循环所有
不要一次性for循环所有
#2
怎么写
#3
感觉可能还是和你这个aviWriter的用法有关,就是需要在添加后面的图片时,前面的图片数据所占内存要被释放掉.
#4
所谓"内存不足"就是指在启动或运行DOS应用程序和Windows应用程序时,系统报"Out of
memory"或"内存不足"的错误信息。"内存不足"是一种很常见的故障,运行DOS应用程序和Windows应用程序引起"内存不足"的原因不完全相同。
一、DOS下的内存不足
如果是在运行DOS应用程序时出现" Out of memory"(内存不足)的故障,可按以下方法进行检查和处理:
1、检查系统是否提供对扩充内存的支持,必须保证CONFIG.SYS文件中的EMM386.EXE命令中含有RAM参数,关于RAM参数的设置请参考相关文章,这里就不述叙;
2、 如果故障仍存在,检查DOS内核程序与其它运行的应用程序是否兼容,某些程序是否占用了大量的常规内存,并作出相应的处理。
举个例子:一次我在运行WPS
时,屏幕显示"内存不够",系统无法运行。考虑到在运行WPS之前曾执行过一些其它程序,可能是这些程序没有完全从内存中退出,于是重新启动,运行金山汉字系统,WPS
编辑软件仍无法进入,用DOS
6.22的Mem命令查看内存,仅剩200KB左右的空间,且CHLIB文件占用主内存达255KB,即字库放在了常规内存中,而金山系统是应该可以自动使用扩展内存存放字库的,查看系统配置情况,在CONFIG.SYS中设有:
DEVICE=C:\DOS\HIMEM.SYS
DOS=HIGH
这就是说,DOS内核程序调入扩展内存后,虽然扩大了可用主内存空间,但是由于扩展内存与金山系统发生冲突,以致汉字库无法载入扩展内存。解决的办法有两种:
1、去掉DOS=HIGH设置,将DOS内核程序从扩展内存撤出,即可正常运行。
2、将"/DEVICE=C:\DOS\HIMEM.SYS"改为"/DEVICE=C:\DOS\HIMEM.SYS/INT15=320",因金山系统使用的是扩展内存的低端,这一区域若有其它程序驻留,字库就不能正常载入,利用INT15参数给系统先预留出一部分传统的扩展存储器(即不由XMS规范管理而由INT15直接使用的扩展存储器),字库和DOS内核都可使用扩展内存了,这样设置之后,在金山汉字系统状态下可用的主内存空间可达512KB,比不设置时多出250KB左右。
二、Windows中的内存不足
如果在运行Windows应用程序时,出现"内存不足"的故障,可按下列方法进行检查和处理:
1、首先应检查Windows的资源使用情况,如果资源占用较多,可用资源较少,打开新文件时会出现"内存不足"的问题。这时可以清理屏幕,减少窗口的数目,关闭不用的应用程序,包括TSR内存驻留程序,将Windows应用程序最小化为图标,如果问题只是在运行一特殊的应用程序时出现,则与应用软件销售商联系,可能是数据对象的管理不好所致;
2、如果问题没有解决,清除或保存Clipboard(剪贴板)的内容,使用ControlPanel
Desktop选项将墙纸(Wallpaper)设置为None;
3、如问题仍存在,可用PIF编辑器编辑PIF文件,增大PIF文件中定义的MemoryRequirements:KB
Required的值;在标准模式下,选择Prevent
ProgramSwitch,该开关选项打开后,退出应用程序返回Windows;如果是386增强模式,则要将Display
Usage设置成Full Screen(全屏幕方式),将Execution设置为Exclusive,将Video
memory设置为尽可能低的方式;
4、
如果问题仍存在,则重新开机进入Windows系统,并且确保在"启动"图标中没有其它无关的应用软件同时启动运行,在WIN.INI文件中也没有Run或Load命令加载的任何无关的应用程序。
在平时,出现"内存不足"的问题一般可以按以下办法处理。
首先,退出那些不需要运行的应用程序,然后,再检查系统的可用资源为多少。如果可用资源大于30%,一般可以运行新的程序。当有多个应用程序在系统中运行时,可以退出一个,检查一次可用资源,如果某个应用程序在退出前后,可用资源的百分比没有变化,说明这个应用程序没有释放它所占用的资源。如果要收回这些没有释放的资源,只能退出Windows后,再重新进入Windows。为了确保在启动进入Windows时系统的可用资源足够,在"启动"图标中应该没有无关的应用软件同时启动运行,在WIN.INI文件中也没有由Run或Load命令加载的任何无关的应用程序,因为这些同时启动的无关应用程序可能已经占用了很多资源,使得要使用的应用程序无法运行。
一般说来,经过这样处理,就不会出现"内存不足"的问题了
memory"或"内存不足"的错误信息。"内存不足"是一种很常见的故障,运行DOS应用程序和Windows应用程序引起"内存不足"的原因不完全相同。
一、DOS下的内存不足
如果是在运行DOS应用程序时出现" Out of memory"(内存不足)的故障,可按以下方法进行检查和处理:
1、检查系统是否提供对扩充内存的支持,必须保证CONFIG.SYS文件中的EMM386.EXE命令中含有RAM参数,关于RAM参数的设置请参考相关文章,这里就不述叙;
2、 如果故障仍存在,检查DOS内核程序与其它运行的应用程序是否兼容,某些程序是否占用了大量的常规内存,并作出相应的处理。
举个例子:一次我在运行WPS
时,屏幕显示"内存不够",系统无法运行。考虑到在运行WPS之前曾执行过一些其它程序,可能是这些程序没有完全从内存中退出,于是重新启动,运行金山汉字系统,WPS
编辑软件仍无法进入,用DOS
6.22的Mem命令查看内存,仅剩200KB左右的空间,且CHLIB文件占用主内存达255KB,即字库放在了常规内存中,而金山系统是应该可以自动使用扩展内存存放字库的,查看系统配置情况,在CONFIG.SYS中设有:
DEVICE=C:\DOS\HIMEM.SYS
DOS=HIGH
这就是说,DOS内核程序调入扩展内存后,虽然扩大了可用主内存空间,但是由于扩展内存与金山系统发生冲突,以致汉字库无法载入扩展内存。解决的办法有两种:
1、去掉DOS=HIGH设置,将DOS内核程序从扩展内存撤出,即可正常运行。
2、将"/DEVICE=C:\DOS\HIMEM.SYS"改为"/DEVICE=C:\DOS\HIMEM.SYS/INT15=320",因金山系统使用的是扩展内存的低端,这一区域若有其它程序驻留,字库就不能正常载入,利用INT15参数给系统先预留出一部分传统的扩展存储器(即不由XMS规范管理而由INT15直接使用的扩展存储器),字库和DOS内核都可使用扩展内存了,这样设置之后,在金山汉字系统状态下可用的主内存空间可达512KB,比不设置时多出250KB左右。
二、Windows中的内存不足
如果在运行Windows应用程序时,出现"内存不足"的故障,可按下列方法进行检查和处理:
1、首先应检查Windows的资源使用情况,如果资源占用较多,可用资源较少,打开新文件时会出现"内存不足"的问题。这时可以清理屏幕,减少窗口的数目,关闭不用的应用程序,包括TSR内存驻留程序,将Windows应用程序最小化为图标,如果问题只是在运行一特殊的应用程序时出现,则与应用软件销售商联系,可能是数据对象的管理不好所致;
2、如果问题没有解决,清除或保存Clipboard(剪贴板)的内容,使用ControlPanel
Desktop选项将墙纸(Wallpaper)设置为None;
3、如问题仍存在,可用PIF编辑器编辑PIF文件,增大PIF文件中定义的MemoryRequirements:KB
Required的值;在标准模式下,选择Prevent
ProgramSwitch,该开关选项打开后,退出应用程序返回Windows;如果是386增强模式,则要将Display
Usage设置成Full Screen(全屏幕方式),将Execution设置为Exclusive,将Video
memory设置为尽可能低的方式;
4、
如果问题仍存在,则重新开机进入Windows系统,并且确保在"启动"图标中没有其它无关的应用软件同时启动运行,在WIN.INI文件中也没有Run或Load命令加载的任何无关的应用程序。
在平时,出现"内存不足"的问题一般可以按以下办法处理。
首先,退出那些不需要运行的应用程序,然后,再检查系统的可用资源为多少。如果可用资源大于30%,一般可以运行新的程序。当有多个应用程序在系统中运行时,可以退出一个,检查一次可用资源,如果某个应用程序在退出前后,可用资源的百分比没有变化,说明这个应用程序没有释放它所占用的资源。如果要收回这些没有释放的资源,只能退出Windows后,再重新进入Windows。为了确保在启动进入Windows时系统的可用资源足够,在"启动"图标中应该没有无关的应用软件同时启动运行,在WIN.INI文件中也没有由Run或Load命令加载的任何无关的应用程序,因为这些同时启动的无关应用程序可能已经占用了很多资源,使得要使用的应用程序无法运行。
一般说来,经过这样处理,就不会出现"内存不足"的问题了
#5
http://www.jxcad.com.cn/topic_1072594.html
#6
int m=al.Count;
while(m>10)//我设置是每次读取10张,具体多少你自己看着办
{
// al是个arrayList 里面放在图片存放的地址
for (int i = 0; i<10;i++){
// 取出图片
Bitmap bm = new Bitmap(Image.FromFile(al[i].toString()));
添加帧 写入avi
aviWriter.AddFrame(bm);
}
m-=10;
}
if(m>0)
{
// al是个arrayList 里面放在图片存放的地址
for (int i = 0; i<m;i++){
// 取出图片
Bitmap bm = new Bitmap(Image.FromFile(al[i].toString()));
添加帧 写入avi
aviWriter.AddFrame(bm);
}
}
#7
可否采用分批读取、分批写入的方式?
比如每次读取100张左右的图片,添加进去之后就将当前AVI的输入写入到文件中完成之后清空内存区,下次再读取100张图片,添加进去之后再将视频数据追加到文件中然后清空内存区,一直循环下去直至结束。
#8
ps:
m-=10;
后添加
Thread.Sleep(2000); //每读取10张让进程sleep 2 秒
m-=10;
后添加
Thread.Sleep(2000); //每读取10张让进程sleep 2 秒
#9
每天评论一条,你好我好大家好
#10
专业接分 ……
#11
没分了..
#12
-----------------------
#13
这个很强大啊``
#14
分批读取吧。
#15
bm没有释放
#16
可能要释放内存吧
#17
已经解决了
#18
#19
纠结,怎么解决系统内不足?
#20
#1
分段读取
不要一次性for循环所有
不要一次性for循环所有
#2
怎么写
#3
感觉可能还是和你这个aviWriter的用法有关,就是需要在添加后面的图片时,前面的图片数据所占内存要被释放掉.
#4
所谓"内存不足"就是指在启动或运行DOS应用程序和Windows应用程序时,系统报"Out of
memory"或"内存不足"的错误信息。"内存不足"是一种很常见的故障,运行DOS应用程序和Windows应用程序引起"内存不足"的原因不完全相同。
一、DOS下的内存不足
如果是在运行DOS应用程序时出现" Out of memory"(内存不足)的故障,可按以下方法进行检查和处理:
1、检查系统是否提供对扩充内存的支持,必须保证CONFIG.SYS文件中的EMM386.EXE命令中含有RAM参数,关于RAM参数的设置请参考相关文章,这里就不述叙;
2、 如果故障仍存在,检查DOS内核程序与其它运行的应用程序是否兼容,某些程序是否占用了大量的常规内存,并作出相应的处理。
举个例子:一次我在运行WPS
时,屏幕显示"内存不够",系统无法运行。考虑到在运行WPS之前曾执行过一些其它程序,可能是这些程序没有完全从内存中退出,于是重新启动,运行金山汉字系统,WPS
编辑软件仍无法进入,用DOS
6.22的Mem命令查看内存,仅剩200KB左右的空间,且CHLIB文件占用主内存达255KB,即字库放在了常规内存中,而金山系统是应该可以自动使用扩展内存存放字库的,查看系统配置情况,在CONFIG.SYS中设有:
DEVICE=C:\DOS\HIMEM.SYS
DOS=HIGH
这就是说,DOS内核程序调入扩展内存后,虽然扩大了可用主内存空间,但是由于扩展内存与金山系统发生冲突,以致汉字库无法载入扩展内存。解决的办法有两种:
1、去掉DOS=HIGH设置,将DOS内核程序从扩展内存撤出,即可正常运行。
2、将"/DEVICE=C:\DOS\HIMEM.SYS"改为"/DEVICE=C:\DOS\HIMEM.SYS/INT15=320",因金山系统使用的是扩展内存的低端,这一区域若有其它程序驻留,字库就不能正常载入,利用INT15参数给系统先预留出一部分传统的扩展存储器(即不由XMS规范管理而由INT15直接使用的扩展存储器),字库和DOS内核都可使用扩展内存了,这样设置之后,在金山汉字系统状态下可用的主内存空间可达512KB,比不设置时多出250KB左右。
二、Windows中的内存不足
如果在运行Windows应用程序时,出现"内存不足"的故障,可按下列方法进行检查和处理:
1、首先应检查Windows的资源使用情况,如果资源占用较多,可用资源较少,打开新文件时会出现"内存不足"的问题。这时可以清理屏幕,减少窗口的数目,关闭不用的应用程序,包括TSR内存驻留程序,将Windows应用程序最小化为图标,如果问题只是在运行一特殊的应用程序时出现,则与应用软件销售商联系,可能是数据对象的管理不好所致;
2、如果问题没有解决,清除或保存Clipboard(剪贴板)的内容,使用ControlPanel
Desktop选项将墙纸(Wallpaper)设置为None;
3、如问题仍存在,可用PIF编辑器编辑PIF文件,增大PIF文件中定义的MemoryRequirements:KB
Required的值;在标准模式下,选择Prevent
ProgramSwitch,该开关选项打开后,退出应用程序返回Windows;如果是386增强模式,则要将Display
Usage设置成Full Screen(全屏幕方式),将Execution设置为Exclusive,将Video
memory设置为尽可能低的方式;
4、
如果问题仍存在,则重新开机进入Windows系统,并且确保在"启动"图标中没有其它无关的应用软件同时启动运行,在WIN.INI文件中也没有Run或Load命令加载的任何无关的应用程序。
在平时,出现"内存不足"的问题一般可以按以下办法处理。
首先,退出那些不需要运行的应用程序,然后,再检查系统的可用资源为多少。如果可用资源大于30%,一般可以运行新的程序。当有多个应用程序在系统中运行时,可以退出一个,检查一次可用资源,如果某个应用程序在退出前后,可用资源的百分比没有变化,说明这个应用程序没有释放它所占用的资源。如果要收回这些没有释放的资源,只能退出Windows后,再重新进入Windows。为了确保在启动进入Windows时系统的可用资源足够,在"启动"图标中应该没有无关的应用软件同时启动运行,在WIN.INI文件中也没有由Run或Load命令加载的任何无关的应用程序,因为这些同时启动的无关应用程序可能已经占用了很多资源,使得要使用的应用程序无法运行。
一般说来,经过这样处理,就不会出现"内存不足"的问题了
memory"或"内存不足"的错误信息。"内存不足"是一种很常见的故障,运行DOS应用程序和Windows应用程序引起"内存不足"的原因不完全相同。
一、DOS下的内存不足
如果是在运行DOS应用程序时出现" Out of memory"(内存不足)的故障,可按以下方法进行检查和处理:
1、检查系统是否提供对扩充内存的支持,必须保证CONFIG.SYS文件中的EMM386.EXE命令中含有RAM参数,关于RAM参数的设置请参考相关文章,这里就不述叙;
2、 如果故障仍存在,检查DOS内核程序与其它运行的应用程序是否兼容,某些程序是否占用了大量的常规内存,并作出相应的处理。
举个例子:一次我在运行WPS
时,屏幕显示"内存不够",系统无法运行。考虑到在运行WPS之前曾执行过一些其它程序,可能是这些程序没有完全从内存中退出,于是重新启动,运行金山汉字系统,WPS
编辑软件仍无法进入,用DOS
6.22的Mem命令查看内存,仅剩200KB左右的空间,且CHLIB文件占用主内存达255KB,即字库放在了常规内存中,而金山系统是应该可以自动使用扩展内存存放字库的,查看系统配置情况,在CONFIG.SYS中设有:
DEVICE=C:\DOS\HIMEM.SYS
DOS=HIGH
这就是说,DOS内核程序调入扩展内存后,虽然扩大了可用主内存空间,但是由于扩展内存与金山系统发生冲突,以致汉字库无法载入扩展内存。解决的办法有两种:
1、去掉DOS=HIGH设置,将DOS内核程序从扩展内存撤出,即可正常运行。
2、将"/DEVICE=C:\DOS\HIMEM.SYS"改为"/DEVICE=C:\DOS\HIMEM.SYS/INT15=320",因金山系统使用的是扩展内存的低端,这一区域若有其它程序驻留,字库就不能正常载入,利用INT15参数给系统先预留出一部分传统的扩展存储器(即不由XMS规范管理而由INT15直接使用的扩展存储器),字库和DOS内核都可使用扩展内存了,这样设置之后,在金山汉字系统状态下可用的主内存空间可达512KB,比不设置时多出250KB左右。
二、Windows中的内存不足
如果在运行Windows应用程序时,出现"内存不足"的故障,可按下列方法进行检查和处理:
1、首先应检查Windows的资源使用情况,如果资源占用较多,可用资源较少,打开新文件时会出现"内存不足"的问题。这时可以清理屏幕,减少窗口的数目,关闭不用的应用程序,包括TSR内存驻留程序,将Windows应用程序最小化为图标,如果问题只是在运行一特殊的应用程序时出现,则与应用软件销售商联系,可能是数据对象的管理不好所致;
2、如果问题没有解决,清除或保存Clipboard(剪贴板)的内容,使用ControlPanel
Desktop选项将墙纸(Wallpaper)设置为None;
3、如问题仍存在,可用PIF编辑器编辑PIF文件,增大PIF文件中定义的MemoryRequirements:KB
Required的值;在标准模式下,选择Prevent
ProgramSwitch,该开关选项打开后,退出应用程序返回Windows;如果是386增强模式,则要将Display
Usage设置成Full Screen(全屏幕方式),将Execution设置为Exclusive,将Video
memory设置为尽可能低的方式;
4、
如果问题仍存在,则重新开机进入Windows系统,并且确保在"启动"图标中没有其它无关的应用软件同时启动运行,在WIN.INI文件中也没有Run或Load命令加载的任何无关的应用程序。
在平时,出现"内存不足"的问题一般可以按以下办法处理。
首先,退出那些不需要运行的应用程序,然后,再检查系统的可用资源为多少。如果可用资源大于30%,一般可以运行新的程序。当有多个应用程序在系统中运行时,可以退出一个,检查一次可用资源,如果某个应用程序在退出前后,可用资源的百分比没有变化,说明这个应用程序没有释放它所占用的资源。如果要收回这些没有释放的资源,只能退出Windows后,再重新进入Windows。为了确保在启动进入Windows时系统的可用资源足够,在"启动"图标中应该没有无关的应用软件同时启动运行,在WIN.INI文件中也没有由Run或Load命令加载的任何无关的应用程序,因为这些同时启动的无关应用程序可能已经占用了很多资源,使得要使用的应用程序无法运行。
一般说来,经过这样处理,就不会出现"内存不足"的问题了
#5
http://www.jxcad.com.cn/topic_1072594.html
#6
int m=al.Count;
while(m>10)//我设置是每次读取10张,具体多少你自己看着办
{
// al是个arrayList 里面放在图片存放的地址
for (int i = 0; i<10;i++){
// 取出图片
Bitmap bm = new Bitmap(Image.FromFile(al[i].toString()));
添加帧 写入avi
aviWriter.AddFrame(bm);
}
m-=10;
}
if(m>0)
{
// al是个arrayList 里面放在图片存放的地址
for (int i = 0; i<m;i++){
// 取出图片
Bitmap bm = new Bitmap(Image.FromFile(al[i].toString()));
添加帧 写入avi
aviWriter.AddFrame(bm);
}
}
#7
可否采用分批读取、分批写入的方式?
比如每次读取100张左右的图片,添加进去之后就将当前AVI的输入写入到文件中完成之后清空内存区,下次再读取100张图片,添加进去之后再将视频数据追加到文件中然后清空内存区,一直循环下去直至结束。
#8
ps:
m-=10;
后添加
Thread.Sleep(2000); //每读取10张让进程sleep 2 秒
m-=10;
后添加
Thread.Sleep(2000); //每读取10张让进程sleep 2 秒
#9
每天评论一条,你好我好大家好
#10
专业接分 ……
#11
没分了..
#12
-----------------------
#13
这个很强大啊``
#14
分批读取吧。
#15
bm没有释放
#16
可能要释放内存吧
#17
已经解决了
#18
#19
纠结,怎么解决系统内不足?