c# - 将图像缩放到多种尺寸以进行深度缩放

标签 c# .net graphics gdi+ image-scaling

假设我有一个方形的位图,宽度为 2048 像素。

为了创建 Silverlight 的 DeepZoomImageTileSource 需要的一组文件,我需要将此位图缩放到 1024,然后缩放到 512,再缩放到 256,等等,直到 1 像素图像。

我怀疑有两种方法很幼稚:-

  1. 对于每个需要的图像,将原始全尺寸图像缩放到所需尺寸。然而,将整个图像缩放到非常小的尺寸似乎过分了。
  2. 从一个级别缩放到下一个级别后,丢弃原始图像并将每个连续缩放的图像缩放为下一个较小图像的来源。但是,我怀疑这会生成 256-64 范围内的图像,保真度比使用选项 1 差。

请注意,与 Deep Zoom Composer 不同,此工具预计将以按需方式运行,因此需要在合理的时间范围内完成(最多 30 秒)。从好的方面来说,我只创建了一个单一的多尺度图像,而不是多个高分辨率图像的金字塔。

我在这里超出了我的舒适区,任何图形专家有什么建议吗?我对第2点错了吗?第 1 点的性能是否合理,我什么都不担心?选项 3?

最佳答案

您实际上要做的是创建 MipMap(请参阅 http://en.wikipedia.org/wiki/Mipmap)。如果您从 2 的正方形图像开始,然后将图像缩小到一半大小,然后使用缩小后的图像再次将其大小缩小 2 应该会得到与原始图像相同的结果并将其缩小为4 倍。

半尺寸图像中的每个像素将是原始图像中 4 个像素的平均值。四分之一大小图像中的每个像素将是 16 个像素的平均值。取 16 个像素的平均值或取 4 个其他像素的平均值的 4 个像素的平均值并不重要。

所以我想说您可以按照选项 2 中提到的那样连续缩小图像。如果您想确定,请尝试两种方法并比较图像。

关于c# - 将图像缩放到多种尺寸以进行深度缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1438488/

相关文章:

java - 颜色检测后发生事件

Java Swing - 在不覆盖的情况下绘制 JPanel

C#/Silverlight/WPF/快速渲染大量圆圈

c# - 删除 ObservableCollection 中的一项

c# - LINQ 到 XML 语法

c# - 实时解码 - 标准输入到标准输出

c# - 安装项目安装完成后重新启动的最简单方法是什么?

c# - 注入(inject)的依赖项应该公开访问还是私有(private)?

C# 指针/引用

c# - 配置系统在 log4net 中初始化失败