【发布时间】:2015-09-20 20:59:16
【问题描述】:
我使用 FileOpenPicker 获得了一张图片。我想将图像的路径保存在数据库中,以便通过使用该路径,我可以在任何其他屏幕上获取该图像,
现在我只需将图像路径发送到第二页。但使用相同的路径我无法获得图像。
这是我的代码。
private async void button_Click(object sender, RoutedEventArgs e)
{
ImagePath = string.Empty;
FileOpenPicker filePicker = new FileOpenPicker();
filePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
filePicker.ViewMode = PickerViewMode.Thumbnail;
filePicker.FileTypeFilter.Clear();
filePicker.FileTypeFilter.Add(".bmp");
filePicker.FileTypeFilter.Add(".png");
filePicker.FileTypeFilter.Add(".jpeg");
filePicker.FileTypeFilter.Add(".jpg");
filePicker.PickSingleFileAndContinue();
view.Activated += viewActivated;
}
private async void viewActivated(CoreApplicationView sender, IActivatedEventArgs args1)
{
FileOpenPickerContinuationEventArgs args = args1 as FileOpenPickerContinuationEventArgs;
if (args != null)
{
if (args.Files.Count == 0) return;
view.Activated -= viewActivated;
StorageFile storageFile = args.Files[0];
var stream = await storageFile.OpenAsync(Windows.Storage.FileAccessMode.Read);
**//ImagePath is global string. I get the image path here**
ImagePath = storageFile.Path;
var bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
await bitmapImage.SetSourceAsync(stream);
var decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(stream);
//image is my image control in Xaml.
image.Source = bitmapImage;
}
}
private void image_click(object sender, TappedRoutedEventArgs e)
{
this.Frame.Navigate(typeof(detail), ImagePath);
}
通过点击图像,我移动到详细信息屏幕。我有另一个图像控件,我想在其中显示相同的图像,,,,通过路径。
我的详细信息屏幕代码是:
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
var imagePath = e.Parameter as string;
image2.Source = new BitmapImage(new Uri(imagePath, UriKind.RelativeOrAbsolute));
}
上面的代码不起作用。
然后我尝试了另一种方法,
var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri(imagePath));
Stream stream = await file.OpenStreamForReadAsync();
using (var memStream = new MemoryStream())
{
await stream.CopyToAsync(memStream);
memStream.Position = 0;
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(memStream.AsRandomAccessStream());
// create a new stream and encoder for the new image
InMemoryRandomAccessStream mrAccessStream = new InMemoryRandomAccessStream();
BitmapEncoder encoder = await BitmapEncoder.CreateForTranscodingAsync(mrAccessStream, decoder);
// convert the bitmap to a 400px by 600px bitmap
encoder.BitmapTransform.ScaledHeight = 400;
encoder.BitmapTransform.ScaledWidth = 600;
try
{
await encoder.FlushAsync();
}
catch (Exception ex)
{
string s = ex.ToString();
}
// render the stream to the screen
WB = new WriteableBitmap(500, 500);
WB.SetSource(mrAccessStream);
image2.Source = WB;
这也不起作用。 我认为问题出在路径上。我的路径很尴尬,比如
"C:\\Data\\Users\\Public\\Pictures\\Saved Pictures\\Image-130872081698409356.jpeg".
请帮我解决这个问题。
【问题讨论】:
-
正确。 Windows Phone 没有这样的文件结构。你不能加载任何类型的文件。路径不正确 - 这就是问题所在。你看到异常是什么了吗?有什么例外?
-
两种方式都不例外。我只是没有在图像控制中获得图像。
-
能否请您告诉我如何获取确切路径,以便我可以在任何地方使用它并获取图像。
-
您是否尝试使用
StorageApplicationPermissions.MostRecentlyUsedList或StorageApplicationPermissions.FutureAccessList?您将通过令牌而不是完整路径来识别文件,但这就是“metro”应用程序保持文件可访问性的方式。 -
不,我没有使用这个。你能给我一个样品吗?
标签: c# image windows-phone-8.1 fileopenpicker