找的一个C#方法用于批量处理图片缩放,内存不足问题。
在网上找的一个批量处理图片缩放的方法。进行图片的批量处理。发现处理的张数最多只能一起处理2000多张,电脑就报内存不足了。下面是主要方法,求大神指导。
private void button1_Click(object sender, EventArgs e)
{
DirectoryInfo cuurDir = new DirectoryInfo(currentDirPath);
FileInfo[] files = cuurDir.GetFiles(); //返回当前目录的文件列表
StringBuilder builder = new StringBuilder("<ul>");
Parallel.ForEach(files, file =>
{
string oldFileName = file.FullName;
string newFileName = GetSaveDirPath("D:\\VSTS\\JuFine\\03_Code\\DataFeed" + "\\i801") + "\\" + file.Name;
Bitmap srcBitmap = null;
Bitmap destBitmap = null;
Graphics graphic = null;
try
{
int width = Convert.ToInt32(TxtWidth.Text);
int height = Convert.ToInt32(TxtHeight.Text);
width = width == 0 ? 100 : width;
height = height == 0 ? 100 : height;
GC.Collect(); GC.WaitForPendingFinalizers();
srcBitmap = new Bitmap(file.FullName); //加载原图
destBitmap = new Bitmap(width, height);
RectangleF srcRec = new RectangleF(0, 0, srcBitmap.Width, srcBitmap.Height);
RectangleF destRec = new RectangleF(0, 0, width, height);
graphic = Graphics.FromImage(destBitmap);
graphic.DrawImage(srcBitmap, destRec, srcRec, GraphicsUnit.Pixel);
destBitmap.Save(newFileName, System.Drawing.Imaging.ImageFormat.Jpeg);//保存较大Jpeg,如1280*1024图片时,比较消耗内存哦。
if (graphic != null) { graphic.Dispose(); graphic = null; }
if (destBitmap != null) { destBitmap.Dispose(); destBitmap = null; }
if (srcBitmap != null) { srcBitmap.Dispose(); srcBitmap = null; }
GC.Collect(); GC.WaitForPendingFinalizers();
}
catch (Exception ex)
{
if (graphic != null) { graphic.Dispose(); graphic = null; }
if (destBitmap != null) { destBitmap.Dispose(); destBitmap = null; }
if (srcBitmap != null) { srcBitmap.Dispose(); srcBitmap = null; }
GC.Collect(); GC.WaitForPendingFinalizers();
MessageBox.Show(ex.Message);
}
finally
{
FileInfo newFile = new FileInfo(newFileName);
builder.Append(string.Format(@"<li><img style='width:150px;height:200px;' alt='{0}' src='{1}' /><p>大小:{2}k</p></li>", newFile.Name, newFile.FullName, newFile.Length)).Append(Environment.NewLine);
}
});
builder.Append("</ul>");
string template = TemplateHelper.ReadTemplate(TemplateHelper.GetTemplateDirPath(), "template.htm");
List<MatchItem> itemList = new List<MatchItem>();
itemList.Add(new MatchItem("$(imglist)", builder.ToString()));
webBrowser1.DocumentText = TemplateHelper.AnalyzeTemplate(itemList, template);
LblResult.Text = string.Format("共计{0}张图片", files.Length);
MessageBox.Show("请在桌面images文件夹下查看!", "提示信息");
}
private void button1_Click(object sender, EventArgs e)
{
DirectoryInfo cuurDir = new DirectoryInfo(currentDirPath);
FileInfo[] files = cuurDir.GetFiles(); //返回当前目录的文件列表
StringBuilder builder = new StringBuilder("<ul>");
Parallel.ForEach(files, file =>
{
string oldFileName = file.FullName;
string newFileName = GetSaveDirPath("D:\\VSTS\\JuFine\\03_Code\\DataFeed" + "\\i801") + "\\" + file.Name;
Bitmap srcBitmap = null;
Bitmap destBitmap = null;
Graphics graphic = null;
try
{
int width = Convert.ToInt32(TxtWidth.Text);
int height = Convert.ToInt32(TxtHeight.Text);
width = width == 0 ? 100 : width;
height = height == 0 ? 100 : height;
GC.Collect(); GC.WaitForPendingFinalizers();
srcBitmap = new Bitmap(file.FullName); //加载原图
destBitmap = new Bitmap(width, height);
RectangleF srcRec = new RectangleF(0, 0, srcBitmap.Width, srcBitmap.Height);
RectangleF destRec = new RectangleF(0, 0, width, height);
graphic = Graphics.FromImage(destBitmap);
graphic.DrawImage(srcBitmap, destRec, srcRec, GraphicsUnit.Pixel);
destBitmap.Save(newFileName, System.Drawing.Imaging.ImageFormat.Jpeg);//保存较大Jpeg,如1280*1024图片时,比较消耗内存哦。
if (graphic != null) { graphic.Dispose(); graphic = null; }
if (destBitmap != null) { destBitmap.Dispose(); destBitmap = null; }
if (srcBitmap != null) { srcBitmap.Dispose(); srcBitmap = null; }
GC.Collect(); GC.WaitForPendingFinalizers();
}
catch (Exception ex)
{
if (graphic != null) { graphic.Dispose(); graphic = null; }
if (destBitmap != null) { destBitmap.Dispose(); destBitmap = null; }
if (srcBitmap != null) { srcBitmap.Dispose(); srcBitmap = null; }
GC.Collect(); GC.WaitForPendingFinalizers();
MessageBox.Show(ex.Message);
}
finally
{
FileInfo newFile = new FileInfo(newFileName);
builder.Append(string.Format(@"<li><img style='width:150px;height:200px;' alt='{0}' src='{1}' /><p>大小:{2}k</p></li>", newFile.Name, newFile.FullName, newFile.Length)).Append(Environment.NewLine);
}
});
builder.Append("</ul>");
string template = TemplateHelper.ReadTemplate(TemplateHelper.GetTemplateDirPath(), "template.htm");
List<MatchItem> itemList = new List<MatchItem>();
itemList.Add(new MatchItem("$(imglist)", builder.ToString()));
webBrowser1.DocumentText = TemplateHelper.AnalyzeTemplate(itemList, template);
LblResult.Text = string.Format("共计{0}张图片", files.Length);
MessageBox.Show("请在桌面images文件夹下查看!", "提示信息");
}
...全文
相关推荐
大图找小图 C#图片对比高速找图源码
介绍:本代码实现了,图片的搜索功能,可用于类似图片识别外挂中。 C#高速找图程序,比较图片的细节处有何异同,像素级的1图片比较器。2大图找小图。3模糊找图。4透明找图
C#图片处理总结——叠加、缩放、鼠标拖动
<br />/////////////用到的命名空间////////////<br />using System.Drawing;<br />using System.Drawing.Drawing2D;<br />using System.Drawing.Imaging; <br />/////两张图片叠加,float fImage(0—1)透明度///////////////<br /> private void getMixImage(float fImage, string strFrontImag
C#实现智能图片缩放器的完整教程
在数字媒体和网络通信日益普及的今天,图片作为信息传递的重要媒介,其分辨率和大小直接影响到视觉效果和传输效率。为了确保图片在各种应用场景中的最佳展示效果,同时考虑到加载速度和存储空间,图片分辨率与大小的优化显得尤为重要。自定义设置应允许用户根据自己的需求调整应用行为。例如,一个智能图片缩放器可以提供如下自定义选项:输出尺寸:用户可以指定一个最大尺寸,图片会按比例缩放至该尺寸内。质量设置:用户可以根据需要选择压缩质量。格式选择。
C# 通过鼠标滚轮实现缩放图片和移动图片
C# 通过鼠标实现放大图片和移动图片,内附有源码和exe,实现鼠标滚轮放大和图片平移
c#图片缩放的简单方法
C#图片缩放,使用Bitmap的方式,可以将图片按比例缩放,也可以设定固定大小


