简陋的 TIFF 查看器






4.50/5 (12投票s)
一个单 DLL、支持多页 TIFF 的 .NET 查看器控件,具有平移和缩略图支持
引言
TIFF 是一种广泛使用的文件格式,应用于许多图像处理应用程序,包括(但不限于)扫描、传真和光学字符识别。 它是一种成熟的栅格图像存储格式,其上次重大更新是在 1992 年。
本文提供了一个基于 .NET 现有功能的即用型 TIFF 查看器控件,因此内容简短。 该控件具有局限性,并且在功能或性能方面显然无法与商业 TIFF 查看器相提并论,但它应该足以满足 TIFF 查看需求有限的应用程序。
背景
我偶尔需要包含 TIFF 查看器的原型应用程序。 尽管 .NET 的 GDI+ 已经包含解码和操作 TIFF 文件的功能,但昂贵的商业 TIFF 查看器用于显示 TIFF 文件。 那些有经验的人会同意正确设置它们是一项繁琐的任务(打包必要的 DLL 集、包括许可证、注意 32 位/64 位兼容性等)。
考虑到这一点,我认为一个仅依赖于 .NET 的基本 TIFF 查看器控件应该已经存在。 但是我能找到的那些都不符合我的需求
以下项目显示多页 TIFF,但缺少缩略图支持
https://codeproject.org.cn/Articles/31247/Multipage-TIF-Viewer
以下项目确实具有缩略图支持,但它是用于 ASP.NET 的
https://codeproject.org.cn/Articles/64146/ASP-NET-Multipage-TIFF-Viewer-with-Thumbnails
所以我决定创建我自己的控件。
控件基础知识
该控件大致遵循 Model-View-Presenter (MVP) 模式,因此我将根据它们在模式中的角色来分解控件的类
模型
TiffImage 类构成模型部分。 它包含实际的 TIFF 图像数据,这些数据存储在 System.Drawing.Bitmap 对象中。 它还包含一个缓存的工作副本,其中包含当前显示的页面和当前的缩放比例。
查看器
三个类用作查看器
PageControl
PictureBox 用于显示 TIFF 文件的当前页面。
唯一值得一提的是平移支持。 实现了 PictureBox 的 MouseDown()、MouseMove()、MoveUp() 方法来支持图像平移。
ThumbnailsControl
经过一些小的修改,标准的 ListView 具有用作缩略图查看器所需的一切。
一个 TIFF 文件可能包含数百页,因此我们不希望在启动时加载所有缩略图。 在这里,listview 的虚拟模式可以帮助我们。 在虚拟模式下,ListView 仅请求即将显示的缩略图。
我以 LargeImage 模式使用 ListView。 我将 listview 绑定到空的 ImageCollection,然后根据需要使用页面的缩略图填充它。 代表缩略图的图标都设置为 100x100,TiffImage.GetThumbnail() 移动图像,以便它们位于此 100x100 视口的中心。
ToolbarControl
ToolbarControl 有一个 ToolStrip 控件,其中包含放大/缩小图像、选择要显示的 TIFF 文件页面的按钮。
表示器
TiffViewer 是 presenter 并且是控件本身。 它控制上述模型和视图之间的交互。
使用控件
该控件需要单个 DLL,即 TiffViewerLib.dll。 右键单击您的 Visual Studio 工具箱,选择“选择项...”,选择“浏览...”,选择“TiffViewerLib.dll”。 将 TiffViewer 控件从工具箱拖到您的窗体。 将控件的 Path 属性设置为您要查看的 TIFF 文件。