【问题标题】:Scaling Image to multiple sizes for Deep Zoom将图像缩放为多种尺寸以进行深度缩放
【发布时间】:2010-11-29 03:18:17
【问题描述】:

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

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

我怀疑有两种天真的方法:-

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我知道这个问题很老了,也许你没有这样做是有原因的,但是如果你得到微软的免费 Deep Zoom Composer,它带有一个用于制作 Deep Zoom 的 DLL,“DeepZoomTools.dll”。它将创建单个图像的 Deep Zoom 合成,或许多图像的合成。 (ImageCreator 类负责调整图像大小的繁重工作。

    如果您正在开发商业应用程序,则应该调查许可的影响,但重用代码总是比自己编写代码要好。

    【讨论】:

    • 我不知道那个组件。这个项目目前运行良好,但我肯定会调查是否有可能用这个 dll 换出我自己的代码。该工具本身是免费的,并且微软积极鼓励开发人员在他们自己的应用程序中使用它,这一事实让我相信它的使用不应该存在商业问题。感谢您的提醒。 ;)
    【解决方案2】:

    您实际上要做的是创建 MipMap(请参阅http://en.wikipedia.org/wiki/Mipmap)。如果您从 2 平方图像的幂开始,然后将图像缩小到一半大小,然后使用按比例缩小的图像再次将其大小减小 2,应该得到与获取原始图像并将其缩小 1 相同的结果因子 4。

    半尺寸图像中的每个像素将是原始图像中 4 个像素的平均值。 quater 大小图像中的每个像素将是 16 个像素的平均值。不管你取 16 个像素的平均值还是 4 个像素的平均值,其他 4 个像素的平均值。

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

    【讨论】:

    • 谢谢马丁。我明白你的意思。我想我试图使问题简单化的尝试有点误导。实际上,这些图像将是扫描仪和数码相机生成的典型尺寸。
    【解决方案3】:

    关于 1:这似乎是最好的方法。而且不每次都重新加载源图片也不算过分。

    关于 2:是的,您会通过逐步缩放而损失(一些)质量。

    我认为 30 秒应该足以缩放图片(几次)。任何优化都在缓存结果方面。

    【讨论】:

    • 谢谢 Henk,我认为在没有任何其他强烈意见的情况下(并进行了一些测试),我会选择选项 1,因为它最容易实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2016-07-02
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    相关资源
    最近更新 更多