Emi*_*m23 3 bing-maps marker xamarin.forms uwp uwp-maps
对于个人需要,对于Xamarin.Forms.Map控件,我需要创建一个CustomPin扩展。UWP 部分(PCL 项目)
我创建了一个MapIcon喜欢它:
nativeMap.MapElements.Add(new MapIcon()
{
Title = pin.Name,
Image = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Assets/Pin/customicon.png")),
Location = new Geopoint(new BasicGeoposition() { Latitude = pin.Position.Latitude, Longitude = pin.Position.Longitude }),
NormalizedAnchorPoint = new Windows.Foundation.Point(0.5, 1.0)
});
Run Code Online (Sandbox Code Playgroud)
但是,通过这种方式,我无法设置Image的大小。
然后我想使用Image我的 PCL 部分中的 ,调整它的大小并将其转换为IRandomAccessStreamReference. 要实现它,我需要将我的Image转换为流,但我找不到使其工作的方法><
所需功能示例:
private IRandomAccessStreamReference ImageToIRandomAccessStreamReference(Image image)
{
//Here I can set the size of my Image
//I convert it into a stream
IRandomAccessStreamReference irasr = RandomAccessStreamReference.CreateFromStream(/* img? */);
//irasr is then created from img
//I return the IRandomAccessStreamReference needed by the MapIcon element
return irasr;
}
Run Code Online (Sandbox Code Playgroud)
注:该Image放慢参数IMG是Xamarin.Forms.Image
那么首先,这可能吗?如果是,那么感谢任何可以帮助我的帮助..我已经搜索了如何调整 MapIcon 的大小,但不能直接从类 [MapIcon] 中进行。(https://msdn.microsoft.com/library/windows/应用程序/windows.ui.xaml.controls.maps.mapicon.aspx)
感谢帮助!
你是对的。我们不能直接调整MapIcon 的大小,因为它不提供这样的属性或方法。MapIcon 的大小主要由MapIcon.Image属性设置的图像大小控制。我们可以在不使用Xamarin.Forms.Image的情况下设置此图像的大小。
要设置此图像的大小,我们可以利用BitmapDecoder 类、BitmapEncoder 类和BitmapTransform 类,如下所示:
private async System.Threading.Tasks.Task<RandomAccessStreamReference> ResizeImage(StorageFile imageFile, uint scaledWidth, uint scaledHeight)
{
using (IRandomAccessStream fileStream = await imageFile.OpenAsync(FileAccessMode.Read))
{
var decoder = await BitmapDecoder.CreateAsync(fileStream);
//create a RandomAccessStream as output stream
var memStream = new InMemoryRandomAccessStream();
//creates a new BitmapEncoder and initializes it using data from an existing BitmapDecoder
BitmapEncoder encoder = await BitmapEncoder.CreateForTranscodingAsync(memStream, decoder);
//resize the image
encoder.BitmapTransform.ScaledWidth = scaledWidth;
encoder.BitmapTransform.ScaledHeight = scaledHeight;
//commits and flushes all of the image data
await encoder.FlushAsync();
//return the output stream as RandomAccessStreamReference
return RandomAccessStreamReference.CreateFromStream(memStream);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我们可以用这种方法首先创建一个调整后的图像流的参考,然后将其设置为MapIcon的Image,如:
var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Pin/customicon.png"));
var imageReference = await ResizeImage(file, 64, 64);
nativeMap.MapElements.Add(new MapIcon()
{
Title = pin.Name,
Image = imageReference,
Location = new Geopoint(new BasicGeoposition() { Latitude = pin.Position.Latitude, Longitude = pin.Position.Longitude }),
NormalizedAnchorPoint = new Windows.Foundation.Point(0.5, 1.0)
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |