Silverlight - 为缩略图部分或渐进加载大图像?

时间:2010-01-22 15:09:58

标签: silverlight silverlight-3.0 azure

我有一些大图像(以MB为单位),我想快速查看缩略图(以KB为单位)。 我想避免在服务器上存储2个图像(一个用于大图像,一个用于缩略图)。

  • 图像与Azure blob一起存储
  • 我查看过deepzoom它似乎没有处理动态图像。

编辑:天蓝色图像的内容类型是“application / octet-stream”。也许改变这会有帮助吗?

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

下载整个图像不存储补充缩略图的替代方法是在服务器上动态生成缩略图。这将是昂贵的。猜测我怀疑你的意思是你不想要求图像提供者必须提供两个图像。可以想象,生成缩略图以保留该副本以供将来使用是可以接受的。

以下是我使用服务器端缩小图像的一大块代码: -

    private Bitmap ScaleImage(Image img, int divisor)
    {
        int toWidth = Math.Max(img.Width / divisor, 1);
        int toHeight = Math.Max(img.Height / divisor, 1);
        Bitmap result = new Bitmap(toWidth, toHeight);
        using (Graphics canvas = Graphics.FromImage(result))
        {
            canvas.DrawImage(img, 0, 0, toWidth, toHeight);
        }
        return result;
    }

然后,您可以使用以下命令将返回图像转换为某些BLOB流: -

img.Save(someStream, ImageFormat.Jpeg);

答案 1 :(得分:0)

为什么要避免将图像存储在服务器上?在运行时从MB大小的图像在服务器上生成缩略图图像将对性能产生巨大影响。 话虽如此,我猜你可以在第一次请求时在运行时生成它们,然后将它们保存到缓存文件夹中。当您下次从缓存中加载它们并直接发回它们时请求它们。