简单的照片发布程序






2.42/5 (6投票s)
2004年11月20日
2分钟阅读

45498

1402
这个程序展示了一个如何操作大量文件来转换它们的大小、质量并获取缩略图的示例。
引言
图片发布器可以转换大小、名称、压缩图片(.bmp、.gif、.jpg)并生成预览图像(如网络相册)。这里展示了简单的线程使用。你可以在 Guidomarche.NET 找到更新。这是一个非常简单的程序,用于同时转换许多图形文件。SinglePhoto.cs 包含一个类,用于收集有关每个要处理的照片的信息,例如原始路径、大小、压缩、新路径、大小和压缩。它仅存储有关新图片属性的信息。只有在保存图片时才会创建新图片。
private int quality;
private string FullSizePath;
private string PreviewPathOut;
private string FullSizePathOut;
private bool AllocatedL;
private System.Drawing.Size FS; //full size
private System.Drawing.Size PS; //preview
当关联的图像需要处理或显示时,图像将使用以下代码在内存中分配
public bool Allocate()
{
System.Drawing.Image.GetThumbnailImageAbort myCallBack =
new System.Drawing.Image.GetThumbnailImageAbort(PreviewFail);
try
{
this.FullSize=new Bitmap(FullSizePath);
this.Preview=this.FullSize.GetThumbnailImage(PS.Width,
PS.Height,myCallBack,IntPtr.Zero);
this.AllocatedL=true;
}
catch
{
return false;
}
return true;
}
现在,SinglePhoto
对象包含一个全尺寸图像(原始图像)和一个预览图像。myCallBack
类似于一个委托,用于处理 GetThumbnailImage
方法中的失败。使用 SinglePhoto
的 FHeight
、FWidth
、PHeight
、PWidth
或 FSSize
、PSSize
属性,或者使用 ResizeFS(int alt, int larg)
、ResizePS(int alt, int larg)
,你可以设置图片的大小,并使用 FsImg
、PrvImg
属性获取调整大小后的图片。
自动化任务区域包含几种生成照片名称序列的方法。我想对 StartLoad()
和 StartSave()
说几句:我决定在单独的线程中加载和保存图片,以避免图形界面“冻结”。一个好的想法是使用不同的线程来转换和保存每张图片,以加快操作速度。但我不太确定它是否真的会更快。运行线程非常简单,这展示了如何运行一个线程
private void StartLoad()
{
ThreadStart LoadingThreadDelegate=new ThreadStart(this.LoadTasks);
Thread LoadingThread= new Thread(LoadingThreadDelegate);
LoadingThread.Name="LoadingThread";
LoadingThread.Start();
}
你所要做的就是创建一个 ThreadStart
对象,链接到你希望在线程启动时启动的方法。在这个例子中,我创建了 LoadingThreadDelegate=new ThreadStart(this.LoadTasks)
,一个链接到 this.LoadTasks()
的 ThreadStart
对象。然后你可以使用 ThreadStart
对象(命名为 LoadingThreadDelegate
)来创建一个新的 Thread
对象,然后启动它。在执行 LoadingThread.Start()
之后,方法 LoadTasks()
和主线程(用户界面)将并发运行。
就这样了...