65.9K
CodeProject 正在变化。 阅读更多。
Home

Windows 缩略图调整器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (8投票s)

2006年4月28日

3分钟阅读

viewsIcon

44452

downloadIcon

868

一篇关于如何制作一个应用程序,该应用程序允许您更改 Windows 中缩略图大小的文章。这些是在 Windows 资源管理器中点击“查看”->“缩略图”时看到的缩略图。

Screenshot of the Windows Thumbnail Resizer

引言

本文介绍了如何编写一个应用程序,该应用程序允许您更改 Windows 中缩略图的大小。这些是在 Windows 资源管理器中点击“查看”->“缩略图”时看到的缩略图。它还涵盖了一些简单的注册表操作和图像处理。

背景

我妻子是一名摄影师,有一天她问我是否可以把 Windows 中的缩略图做得更大。我不知道,但认为如果微软没有提供这项功能,那将是很奇怪的。经过一番快速搜索,我在 Lockergnome 上找到了 Diana Higgins 提供的一个技巧,介绍了如何做到这一点。它如预期般工作,所以我立刻开始制作这个 GUI 前端。

注册表项 ThumbnailSize 的屏幕截图,我们将重点关注它

Screenshot of the registry key ThumbnailSize

工作原理

在深入细节之前,我将简要概述我们需要做什么才能使其正常工作。首先,我们需要一个 GUI 来显示缩略图将有多大。所以,这部分使用了一个带有滑动条的简单 Windows 窗体。当用户拖动滑动条时,窗体上的图像会被调整大小。接下来我们需要的是读取注册表设置的函数,以及一个写入注册表设置的函数。那么,让我们开始吧……

使用代码

代码经过大量注释,以便任何人都能轻松理解。它不使用任何在程序上复杂的函数。如果代码中有任何对初学者来说难以理解的地方——那一定是对注册表处理函数。因此,这里将对此进行详细解释。我还建议您现在就下载源代码,并跟随本文进行学习。

首先。由于此应用程序是注册表的 GUI 前端,我们需要读取和写入注册表的函数,您猜对了,就是注册表。我将在此处解释并展示 saveRegSettings() 的代码。此函数分别接收 keyNamekeyValue 作为参数,类型为 stringint

然后,我们使用一个 try 块来使一切更加安全。在 try 块内部,我们将 RegistryKey 设置为键 \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer,并使用 Registry.CurrentUser.CreateSubKey() 创建一个名为 keyName 的键,该键目前只能是“ThumbnailSize”。然后,我们使用 RegistryKey.SetValue 为该键赋值——keyValue。现在,一切都完成了,我们可以使用 RegistryKey.Close(); 关闭该键。

这是应用程序的一个重要代码部分。saveRegSettings 用于写入 Windows 注册表

/*
 * This function saves the settings to the registry key.
 * valid keyName values are:
 * - ThumbnailSize    
 */
public void saveRegSettings(string keyName, int keyValue) 
{ 
    RegistryKey key = null; 
    string subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer";
    
    //Try to create the registry key...
    try 
    { 
        //Create the subkey...
        key = Registry.CurrentUser.CreateSubKey(subKey);
        
        //...give it a value...
        key.SetValue(keyName, keyValue);
        
        //...and then close it.
        key.Close();
    } 
    catch(Exception ex)
    {
        //Something failed, give a nice error message.
        Console.WriteLine("Edit: HKEY_CURRENT_USER\\" + 
                          subKey + "\\" + key + "\n" + 
        "ERROR: " + ex.ToString()); 
    } 
    finally
    {
        //Finally - we clean up, that means closing the open registry key.
        key.Close(); 
    }
}

由于此应用程序具有一些易于理解的图像处理功能,我将在此处也对此进行一些介绍,只是为了指出它。下面的代码从文件中加载图像并将其显示在窗体上。这是通过使用 System.Drawing 中的 Image.FromFile() 函数来实现的。它以一个包含图像路径的字符串作为参数。生成的图像保存在一个名为 imgImage 变量中。

下一部分将对已加载的图像进行缩略图处理,并用缩略图覆盖 img 变量中的旧全尺寸图像。tbThumbSize.Value 是滚动条的值,代表用户选择的缩略图大小。makeThumbnail() 接受三个参数:ImagemaxWidthmaxHeight。您会从代码中看到两者都被设置为相同的值。这样,我们就可以同时处理纵向和横向图片,因为在制作缩略图时会保留纵横比。

最后,我们将标签设置为滚动条的值,然后进行清理。就这样!

//Try to load the demo image
img = Image.FromFile(Application.StartupPath + "\\Sunset.jpg");

//Try to resize (make a thumbnail) of the demo image.
img = ph.makeThumbnail(img, tbThumbSize.Value, tbThumbSize.Value);    

//Set the thumbnail size in the label
lblThumbSize.Text = tbThumbSize.Value + " x " + tbThumbSize.Value;

//Set the Image property of the picture 
//container to the newly loaded image.
picThumb.Image = img;
ph = null;
picThumb.Refresh();

结论

这向您展示了如何制作一个应用程序来更改 Windows 缩略图大小。然而,您可以非常轻松地将这些技术应用于更改 Windows 注册表中的任何其他内容。例如,您可以创建一个应用程序来读取 Windows 在启动时加载的应用程序,并允许用户更改它们。

如果您还没有这样做,现在是下载源代码并开始尝试的好时机。

历史

  • 2006 年 4 月 28 日 - 初始发布。
© . All rights reserved.