从 url 创建画笔、位图和可写位图
Create imagebrush, bitmap and writeablebitmap from an url
嘿,我有一个使用 silverlight API 的 windows phone 8.1 应用程序。
我正在从我的 blob 存储中下载这张图片。
图像来自这样的 link:https://[service].blob.core.windows.net/[imagename].png 并且图像可以在多个浏览器中显示和下载,只需使用 URI。
我现在想将其用作基于 blobstorage 中 imageuri 的画笔:
// If we have a returned SAS.
BitmapImage myOnlineImage = new BitmapImage();
myOnlineImage.UriSource = new Uri(uploadImage.ImageUri, UriKind.RelativeOrAbsolute);
//ImageOnlineTest.Source = myOnlineImage;
var imageBrush = new ImageBrush
{
ImageSource = myOnlineImage,
Stretch = Stretch.None
};
var source = FindChildShieldCanvas(CanvasImage, imageBrush);
WriteableBitmap wbm = new WriteableBitmap((BitmapImage)myOnlineImage);
ImageOnlineTest.Source = wbm;
myOnlineImage
没有正确创建,至少我不能将图像转换为可写位图图像(从转换中得到一个 null 异常),此外 imagebrush 是空的,即 null。但据我所知这是方法吗?
所以基本上
如何创建基于 url 到 https 站点的 imagebrush
?
要从图像创建位图,您必须在设置 URL 之前开始位图对象的初始化。
BitmapImage myOnlineImage = new BitmapImage();
myOnlineImage.BeginInit();
myOnlineImage.UriSource = new Uri(uploadImage.ImageUri, UriKind.RelativeOrAbsolute);
myOnlineImage.EndInit();
var imageBrush = new ImageBrush
{
ImageSource = myOnlineImage,
Stretch = Stretch.None
};
var source = FindChildShieldCanvas(CanvasImage, imageBrush);
WriteableBitmap wbm = new WriteableBitmap((BitmapImage)myOnlineImage);
ImageOnlineTest.Source = wbm;
最后我自己解决了这个问题:
记得加using System.Runtime.InteropServices.WindowsRuntime;
// If we have a returned SAS.
BitmapImage myOnlineImage = new BitmapImage();
//myOnlineImage.UriSource = new Uri(uploadImage.ImageUri, UriKind.RelativeOrAbsolute);
using (var webCLient = new Windows.Web.Http.HttpClient())
{
webCLient.DefaultRequestHeaders.Add("User-Agent", "bot");
var responseStream = await webCLient.GetBufferAsync(new Uri(uploadImage.ImageUri, UriKind.RelativeOrAbsolute));
var memoryStream = new MemoryStream();//responseStream.ToArrayAsStream().ReadAsync());
memoryStream.Write(responseStream.ToArray(), 0, responseStream.ToArray().Length);
memoryStream.Position = 0;
myOnlineImage.SetSource(memoryStream);
}
//ImageOnlineTest.Source = myOnlineImage;
var imageBrush = new ImageBrush
{
ImageSource = myOnlineImage,
Stretch = Stretch.None
};
var source = FindChildShieldCanvas(CanvasImage, imageBrush);
WriteableBitmap wbm = new WriteableBitmap((BitmapImage)myOnlineImage);
此代码适用于 imagebrush 和 writeablebitmap
您可以通过以下方式使用 C# 完成,将适当的代码替换为您的字段。
Rectangle rectangle = new Rectangle();
rectangle.StrokeThickness = 10;
rectangle.Height = 200;
rectangle.Width = 100;
rectangle.SetValue(Canvas.LeftProperty, 100d);
rectangle.SetValue(Canvas.TopProperty, 100d);
rectangle.Fill = new ImageBrush(new BitmapImage(new Uri(@"C:\User\xiaorui.dong\Pictures\profile.jpeg")));
嘿,我有一个使用 silverlight API 的 windows phone 8.1 应用程序。 我正在从我的 blob 存储中下载这张图片。
图像来自这样的 link:https://[service].blob.core.windows.net/[imagename].png 并且图像可以在多个浏览器中显示和下载,只需使用 URI。
我现在想将其用作基于 blobstorage 中 imageuri 的画笔:
// If we have a returned SAS.
BitmapImage myOnlineImage = new BitmapImage();
myOnlineImage.UriSource = new Uri(uploadImage.ImageUri, UriKind.RelativeOrAbsolute);
//ImageOnlineTest.Source = myOnlineImage;
var imageBrush = new ImageBrush
{
ImageSource = myOnlineImage,
Stretch = Stretch.None
};
var source = FindChildShieldCanvas(CanvasImage, imageBrush);
WriteableBitmap wbm = new WriteableBitmap((BitmapImage)myOnlineImage);
ImageOnlineTest.Source = wbm;
myOnlineImage
没有正确创建,至少我不能将图像转换为可写位图图像(从转换中得到一个 null 异常),此外 imagebrush 是空的,即 null。但据我所知这是方法吗?
所以基本上
如何创建基于 url 到 https 站点的 imagebrush
?
要从图像创建位图,您必须在设置 URL 之前开始位图对象的初始化。
BitmapImage myOnlineImage = new BitmapImage();
myOnlineImage.BeginInit();
myOnlineImage.UriSource = new Uri(uploadImage.ImageUri, UriKind.RelativeOrAbsolute);
myOnlineImage.EndInit();
var imageBrush = new ImageBrush
{
ImageSource = myOnlineImage,
Stretch = Stretch.None
};
var source = FindChildShieldCanvas(CanvasImage, imageBrush);
WriteableBitmap wbm = new WriteableBitmap((BitmapImage)myOnlineImage);
ImageOnlineTest.Source = wbm;
最后我自己解决了这个问题:
记得加using System.Runtime.InteropServices.WindowsRuntime;
// If we have a returned SAS.
BitmapImage myOnlineImage = new BitmapImage();
//myOnlineImage.UriSource = new Uri(uploadImage.ImageUri, UriKind.RelativeOrAbsolute);
using (var webCLient = new Windows.Web.Http.HttpClient())
{
webCLient.DefaultRequestHeaders.Add("User-Agent", "bot");
var responseStream = await webCLient.GetBufferAsync(new Uri(uploadImage.ImageUri, UriKind.RelativeOrAbsolute));
var memoryStream = new MemoryStream();//responseStream.ToArrayAsStream().ReadAsync());
memoryStream.Write(responseStream.ToArray(), 0, responseStream.ToArray().Length);
memoryStream.Position = 0;
myOnlineImage.SetSource(memoryStream);
}
//ImageOnlineTest.Source = myOnlineImage;
var imageBrush = new ImageBrush
{
ImageSource = myOnlineImage,
Stretch = Stretch.None
};
var source = FindChildShieldCanvas(CanvasImage, imageBrush);
WriteableBitmap wbm = new WriteableBitmap((BitmapImage)myOnlineImage);
此代码适用于 imagebrush 和 writeablebitmap
您可以通过以下方式使用 C# 完成,将适当的代码替换为您的字段。
Rectangle rectangle = new Rectangle();
rectangle.StrokeThickness = 10;
rectangle.Height = 200;
rectangle.Width = 100;
rectangle.SetValue(Canvas.LeftProperty, 100d);
rectangle.SetValue(Canvas.TopProperty, 100d);
rectangle.Fill = new ImageBrush(new BitmapImage(new Uri(@"C:\User\xiaorui.dong\Pictures\profile.jpeg")));