对 ASP.NET 图像的颜色量化(Quantization)进行优化
Morgan Skinner
Microsoft Developer Services
2003年5月
摘要:介绍如何动态量化(重新着色)为 ASP.NET 页生成的图像,从而克服 .NET Framework 1.0 和 1.1 版中的 GDI+ 局限性。本文介绍了两种降低图像颜色深度的方法。
适用于:
Microsoft® Framework 1.0 和 1.1 版
Microsoft® Visual C#®
Microsoft® ASP.NET
下载 DotNET_Color_Quantization_Code.exe 示例文件(英文)。
目录
简介
大多数 Web 站点都会包含各种格式的图形,例如 MSDN Web 站点的横幅标题和用于新闻标题列表的缩略图图像。所有这些图像都是静态的 - 它们由 Web 组的一个成员生成,被重新着色以满足 Web 站点的要求,然后存储到磁盘中以备适当时使用。
使用 ASP.NET,还可以在处理当前 Web 请求的过程中创建动态图像。此功能可以使站点个性十足,或者生成符合一定外观风格的图像,而不需要 Web 设计师的服务。
图像的生成相对比较简单:创建一个用于绘图的表面,显示相应的图像,然后将其保存到要返回给用户的 ASP.NET 响应流中。
这种方案唯一的问题就是生成的图像质量。默认情况下,GDI+ 会利用 Web 安全调色板,将位图转换为适用于 Web 页的图像(例如 GIF 或 JPEG)。(有关详细信息,请参阅本文最后的更多信息。)因此生成的图像质量会比较差,而且还可能包含由于使用减色算法而产生的各种杂色。这种利用 Web 安全调色板进行的转换发生在图像转换为输出类型(例如 GIF 或 JPEG)之前,因此,即使输出类型能够支持多种颜色,生成图像时仍然会使用 Web 安全调色板中的颜色。
除了生成的图像质量以外,为图像重新着色还有一个原因就是速度 - 通常从 Web 站点下载每像素 1 字节的图像比下载每像素 4 字节的图像速度要快,而且并不是每个人都有 ADSL。此外,某些浏览器(例如 WebTV)的颜色空间有一定的限制。因此,为了能向客户提供高质量的图像,重新着色是必要的。
为图像重新着色以指定颜色数较少的调色板的过程称为“量化(Quantization)”。
问题概述
为了查看默认 GDI+ 图像显示的结果,我将提供一个简单的图像