下载前显示来自 Azure 存储的图像 - C#

Displaying an Image from Azure Storage before downloading - C#

我正在编写一个程序,允许用户从 Azure Blob 存储下载 selected 图像。

我有它的工作,但是,目前,图像被下载到一个文件,然后这个文件路径用于显示图像。我希望显示图像,然后允许用户 select 可以下载哪些图像。

下面是我下载图片的代码。

for (int i = 1; i<=dira.ListBlobs().Count(); i++)
{
     try
     {
          CloudBlob blob = dira.GetBlobReference(i + ".png");
          blob.DownloadToFile(localFilePath + "/" + i.ToString() + ".png", FileMode.Create);
          // MessageBox.Show(i.ToString());
      }
      catch (StorageException ex)
      {
      }
}

那么我显示下载图片的代码在这里:

pictureBox1.BackgroundImage= Image.FromFile(filePath + ".png");

如何显示尚未下载的图片?

You can not show images without downloading it

但是,

您应该使用实际图像创建缩略图,这样当您向用户显示列表时,您可以从服务器下载缩略图,然后在用户选择时下载实际图像

您可以使用以下代码创建缩略图

    public static System.Drawing.Bitmap ResizeImage(System.Drawing.Image image, int width, int height) 
    { 
        //a holder for the result 
        Bitmap result = new Bitmap(width, height); 

        //use a graphics object to draw the resized image into the bitmap 
        using (Graphics graphics = Graphics.FromImage(result)) 
        { 
            //set the resize quality modes to high quality 
            graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 
            graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
            graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
            //draw the image into the target bitmap 
            graphics.DrawImage(image, 0, 0, result.Width, result.Height); 
        } 

        //return the resulting bitmap 
        return result; 
    } 

参考:- C# Creating thumbnail

如你上面所说,我们可以下载到内存中。

这里有简单的代码供大家参考:

 CloudBlob blob = dira.GetBlobReference(i + ".png");
 MemoryStream memoryStream = new MemoryStream();
 blob.DownloadToStream(memoryStream);
 pictureBox1.BackgroundImage = System.Drawing.Image.FromStream(memoryStream);

如果您想真正节省 PC 和 Blob 存储之间的一些网络流量(也就是下载时间),您只需在 Azure 中创建缩略图

我找到了一个非常好的和完整的例子how to do that。 机制非常简洁 'cloudy'

请记住,以上内容可能会增加您的 Azure 账单。与其他情况一样,您也需要考虑您的优先事项:

  • 我需要超快并为我的用户节省网络 -> 在 Azure 中创建缩略图

  • 我想节省成本,性能不是问题 -> 下载全尺寸图像并在主机上创建缩略图