我正在尝试从特定的URL检索图像,将其显示在我的图像框中,最后将其保存到我的相机胶卷中。这就是我所尝试的,但我得到了一个目标调用异常。这说明了什么?
private void downloadImg()
{
String uri = "http://timenewsfeed.files.wordpress.com/2013/12/doge.jpg";
Uri imgUri = new Uri(uri, UriKind.Absolute);
ImageSource imgSource = new BitmapImage(imgUri);
Dispatcher.BeginInvoke(() =>
{
imageBox.Source = imgSource;
}
);
using (var mediaLibrary = new MediaLibrary())
{
using (var stream = new MemoryStream())
{
Debug.WriteLine("trying to save photo...");
var fileName = "HELLOWORLD.jpg";
BitmapImage img = new BitmapImage(imgUri);
img.CreateOptions = BitmapCreateOptions.None;
img.ImageOpened += (s, e) =>
{
WriteableBitmap bmp = new WriteableBitmap((BitmapImage)s);
bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 100);
};
stream.Seek(0, SeekOrigin.Begin);
Dispatcher.BeginInvoke(() =>
{
var picture = mediaLibrary.SavePicture(fileName, stream);
});
// or to cameraroll
Debug.WriteLine("photo saved");
}
}
}发布于 2014-02-27 21:49:52
我发现你的代码中至少有一个潜在的问题。我看到的主要问题是在你的方法中执行事物的顺序,当你试图保存它时,这可能会导致流为空。您对填充流的ImageOpened进行了处理,但该回调是异步执行的。换句话说,这就是
stream.Seek(0, SeekOrigin.Begin);
Dispatcher.BeginInvoke(() =>
{
var picture = mediaLibrary.SavePicture(fileName, stream);
});可能会在此之前执行
WriteableBitmap bmp = new WriteableBitmap((BitmapImage)s);
bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 100);如果您将保存逻辑上移到ImageOpened处理程序,则可能会解决此问题。所以你会有像这样的东西...
img.ImageOpened += (s, e) =>
{
WriteableBitmap bmp = new WriteableBitmap((BitmapImage)s);
bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 100);
stream.Seek(0, SeekOrigin.Begin);
Dispatcher.BeginInvoke(() =>
{
var picture = mediaLibrary.SavePicture(fileName, stream);
});
};https://stackoverflow.com/questions/22069027
复制相似问题