下载前显示来自 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 中创建缩略图
我想节省成本,性能不是问题 -> 下载全尺寸图像并在主机上创建缩略图
我正在编写一个程序,允许用户从 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 中创建缩略图
我想节省成本,性能不是问题 -> 下载全尺寸图像并在主机上创建缩略图