Error HRESULT 0x88982F72 al intentar transmitir un archivo de imagen

Estoy tratando de transmitir un archivo de imagen con el código simple a continuación.

Stream stream = File.OpenRead(myFileInfo.ToString());

Cuando lo hago, Visual Studio me envía una excepción. Este archivo es un jpeg simple. En el modo de depuración, veo con la clase BitmapDecoder que mi archivo no tiene marcos. En comparación con otros archivos de la misma extensión, todos tienen un Marco.

Ya probé la solución usando la clase FileStream y no funciona :'(

Mi código principal es este:

BitmapImage myBitmapImage = new BitmapImage();
using (Stream stream = File.OpenRead(fileInfo.ToString()))
{
    myBitmapImage.BeginInit();
    myBitmapImage.StreamSource = stream;
    myBitmapImage.EndInit();
}

Está escrito en un convertidor y, naturalmente, se vincula a un control de imagen. Pero la excepción se lanza antes de establecerse en la propiedad Image.Source en la línea a continuación:

myBitmapImage.EndInit();

Otro detalle: el archivo de imagen se puede abrir con Photoshop, Paint.net y otros programas. Cuando estos últimos guardan una copia, los archivos nuevos no presentan problema para abrirse con el mismo código.

Pero no puedo decirles a nuestros clientes que hagan esto todo el tiempo (aproximadamente 50 veces al día :s).

Gracias.

Mi excpetion detalle a continuación:

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: 

preguntado el 04 de julio de 12 a las 10:07

2 Respuestas

Eche un vistazo a esta publicación de blog de Scott Hanselman Manejo de imágenes con metadatos incorrectos: perfiles de color dañados en WPF

Su solución sugerida funcionó en mi caso. Desde el blog:

var bi = new BitmapImage();
bi.BeginInit();
    bi.CreateOptions = BitmapCreateOptions.IgnoreColorProfile;
    bi.UriSource = new Uri("http://hanselman.com/blog/images/JPGwithBadColorProfile.jpg");
bi.EndInit();

foo.Source = bi;

Espero que esto ayude.

Respondido 14 ago 12, 00:08

    BitmapImage Art3 = new BitmapImage();
    using (FileStream stream = File.OpenRead("c:\\temp\\Album.jpg"))
    {
        Art3.BeginInit();
        Art3.StreamSource = stream;
        Art3.EndInit();
    }
    artwork.Source = Art3;

"obra de arte" es el objeto XAML donde se supone que se muestra la imagen.

Respondido 04 Jul 12, 13:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.