以下の簡単なコードで画像ファイルをストリーミングしようとしています。
Stream stream = File.OpenRead(myFileInfo.ToString());
これを行うと、Visual Studio から例外が送信されます。このファイルは単純な jpeg です。デバッグ モードでは、BitmapDecoder クラスでファイルにフレームがないことがわかります。同じ拡張子の他のファイルと比較して、すべて 1 つのフレームを持ちます。
私はすでに FileStream クラスを使用してソリューションを試していますが、うまくいきません:'(
私の主なコードはこれです:
BitmapImage myBitmapImage = new BitmapImage();
using (Stream stream = File.OpenRead(fileInfo.ToString()))
{
myBitmapImage.BeginInit();
myBitmapImage.StreamSource = stream;
myBitmapImage.EndInit();
}
これはコンバーターで記述され、当然 Image コントロールにバインドされます。ただし、例外は、以下の行の Image.Source プロパティに設定される前にスローされます。
myBitmapImage.EndInit();
別の詳細: 画像ファイルは、Photoshop、Paint.net、およびその他のプログラムで開くことができます。これらが最後にコピーを保存するとき、新しいファイルは同じコードで開くのに問題はありません。
しかし、これを常に行うようにお客様に言うことはできません (1 日に約 50 回:s)。
ありがとう。
以下の私の例外の詳細:
System.IO.IOException was unhandled by user code
HResult=-2146232800
Message=Impossible de lire à partir du flux.
Source=PresentationCore
StackTrace:
à System.Windows.Media.ColorContext.GetColorContextsHelper(GetColorContextsDelegate getColorContexts)
à System.Windows.Media.Imaging.BitmapFrameDecode.get_ColorContexts()
à System.Windows.Media.Imaging.BitmapImage.FinalizeCreation()
à System.Windows.Media.Imaging.BitmapImage.EndInit()
à EDIs.Imaging.Converter.UriToBitmapSourceConverter.Convert(Object value, Type targetType, Object parameter, CultureInfo culture) dans C:\Users\Gaet\Documents\Visual Studio 2010\Projects\DotNet\MDP.EDIs\EDIs.Imaging\Converter\UriToBitmapSourceConverter.cs:ligne 40
à System.Windows.Data.BindingExpression.TransferValue(Object newValue, Boolean isASubPropertyChange)
à System.Windows.Data.BindingExpression.Activate(Object item)
à System.Windows.Data.BindingExpression.AttachToContext(AttachAttempt attempt)
à System.Windows.Data.BindingExpression.AttachOverride(DependencyObject target, DependencyProperty dp)
à System.Windows.Data.BindingExpressionBase.OnAttach(DependencyObject d, DependencyProperty dp)
à System.Windows.StyleHelper.GetInstanceValue(UncommonField`1 dataField, DependencyObject container, FrameworkElement feChild, FrameworkContentElement fceChild, Int32 childIndex, DependencyProperty dp, Int32 i, EffectiveValueEntry& entry)
à System.Windows.FrameworkTemplate.ReceivePropertySet(Object targetObject, XamlMember member, Object value, DependencyObject templatedParent)
à System.Windows.FrameworkTemplate.<>c__DisplayClass6.<LoadOptimizedTemplateContent>b__4(Object sender, XamlSetValueEventArgs setArgs)
à System.Xaml.XamlObjectWriter.OnSetValue(Object eventSender, XamlMember member, Object value)
à System.Xaml.XamlObjectWriter.Logic_ApplyPropertyValue(ObjectWriterContext ctx, XamlMember prop, Object value, Boolean onParent)
à System.Xaml.XamlObjectWriter.Logic_DoAssignmentToParentProperty(ObjectWriterContext ctx)
à System.Xaml.XamlObjectWriter.Logic_AssignProvidedValue(ObjectWriterContext ctx)
à System.Xaml.XamlObjectWriter.WriteEndObject()
à System.Xaml.XamlWriter.WriteNode(XamlReader reader)
à System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlReader templateReader, XamlObjectWriter currentWriter)
InnerException: System.Runtime.InteropServices.COMException
HResult=-2003292302
Message=Exception de HRESULT : 0x88982F72
ErrorCode=-2003292302
InnerException: