14.2.3 设计主应用程序
来源:互联网 发布:海川新盟软件下载 编辑:程序博客网 时间:2024/05/16 07:04
14.2.3 设计主应用程序
到目前为止,我们只创建了颜色滤镜,但我们想要我们最终的应用程序,可以处理更一般的图形效果。颜色滤镜,比如,灰阶或亮度,把一个函数应用到每个像素,仅基于该像素的值。其他的效果可能更一般,可以用图像做任何事情,比如,几何变换或模糊。我们在后面将以模糊为例,只是为了说明它的可能性。当我们生成应用程序时,要考虑到这一目标。
这个应用程序允许我们打开一个图像文件,从列表中选择一个效果,将其应用到这个图像上。我们将为每个效果创建顺序和并行版本,以便可以测量性能。运行效果后,应用程序自动显示应用效果要花多长时间。图 14.2 显示最终应用程序的屏幕截图。
图 14.2 完成的图像处理应用程序,对样本图像首先运行灰度,然后再变亮滤镜
在 C# 中,我们可以用 Windows 窗体设计器,创建应用程序的用户界面。应用程序使用 ToolStrip 控件,创建有必要的命令的工具栏,并使用 ToolStripComboBox 控件创建可用的效果列表。打包在 TabControl 的 PictureBox 控件显示图像,所以,我们可以方便地在原始图像和处理过的版本之间切换。
一旦我们在设计器中创建图形用户界面以后,就可以使用已经实现的滤镜。正如我们刚才所说的,应用程序有足够的灵活性,处理一般效果远超过刚才的滤镜,所以,让我们来看看如何在代码中表示想要的这些效果。
创建 F# 中的 Windows 应用程序
不幸的是,在 Visual Studio 中支持的 F# 不包含 Windows 窗体设计器。我们已经看到,在 F# 中,手动创建简单的 图形用户界面,还是容易的,但是,对于这种类型的应用程序,能有一个设计器是有益的。幸运的是,F# 可以方便地引用 C# 库,反之亦然,所以,我们有几个选项可用。
如果只需要创建窗体,可以创建一个 C# 类库项目,包含图形元素,比如,窗体和用户控件,然后,从 F# 应用程序中引用这个库,并从 F# 中使用图形用户界面组件。这是我们用来创建这个应用程序的 F# 版本的一种方法,所以,如果你下载了这个程序的源代码,你可以看到正是它如何工作的。
在 C# 中实现用户交互,引用 F# 库,包含所有数据处理的代码,这是另一种方法。如果我们想要使用这种方法,需要在 F# 对象类型中,打包图形效果(如第 9 章中所述),把 F# 代码编译成库。C# 应用程序然后使用这个库中的类型,以运行图形效果。
引用效果
颜色滤镜是一个函数,取一种颜色,并返回新的颜色。效果也是函数;然而,参数和结果的类型不同。效果可以处理整个图像,因此,它需要取整个图像作为输入。在 C# 的图形用户界面应用程序中,我们还需要保存效果的名字。后面,当我们讲座如何并行化处理过程时,需要给效果的并行版本,添加一个单独的项目。清单 14.13 显示打包到 EffectInfo 类型的所有这些信息。
Listing 14.13 Representation of graphical effect (C#)
class EffectInfo {
public Func<SimpleColor[,], SimpleColor[,]> Effect { get; set; }
public string Name { get; set; }
}
这个类很简单,只有两个属性。我们已经可能以最简单的方法创建,有可变属的属性。我们只会在图形用户界面内使用这种类型,因此,可能会让我们感觉有点不舒服,但也不用太担心。这个类的第一个属性是运行效果的函数,第二个属性是一个名字。这是类似于 F# 记录,包含一个函数和一个字符串;这就是我们将在这个应用程序的 F# 版本中使用的设计。接下来,我们要讨论如何可以创建 EffectInfo 实例,来表示我们以前实现的颜色滤镜。
- 14.2.3 设计主应用程序
- ASP.NET应用程序规划与设计(3)
- 设计 .NET 应用程序
- 设计 .NET 应用程序
- 聊天室应用程序 总体设计
- 设计 .NET 应用程序
- 应用程序权限设计
- 应用程序权限设计
- 应用程序权限设计
- 应用程序权限设计
- 应用程序权限设计
- 应用程序权限设计(转)
- 应用程序权限设计
- 应用程序权限设计
- 设计Twisted应用程序
- 一:设计数据库应用程序
- 转:应用程序框架设计
- 应用程序权限设计
- C#中的Serializable
- Hive安装及问题解决
- 进程间通信学习总结2---信号量互斥同步
- SAP表格维护生成器生成数据表维护视图程序
- 用VC++来设置获得注册表的键值
- 14.2.3 设计主应用程序
- poi 生成excel
- 关注博客
- 基于Socket通信的BS结构文件服务器客户端的简易程序(2)
- 转战Octopress
- CImage load错误
- Flex中itemRenderer效率解说
- C中MAIN函数
- 分析员工离职