2011-09-03 8 views
13

Ho programmato un'applicazione che deve scaricare i file * .png e impostarla sullo sfondo del pulsante in WPF. Così, quando ho eseguito questo programma, si affaccia l'errore come"Impossibile trovare alcun componente di imaging adatto a completare questa operazione."

è stato trovato alcun componente di imaging adatto per completare l'operazione "

Il mio codice è il seguente:.

First download di applicazioni il file con l'oggetto della classe WebClient:

System.Net.WebClient wClient = new System.Net.WebClient(); 
Uri downloadUri = new Uri(MyUri, UriKind.Absolute); 
wClient.DownloadFileAsync(downloadUri, "MyImage.png"); 
wClient.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wClient_DownloadFileCompleted); 

ed evento al termine del download completato verificato:

012.351.641,061 mila
ImageBtn.Dispatcher.Invoke(new Action(() => 
{ 
    ImageBrush ib = new ImageBrush(); 
    BitmapImage bi = new BitmapImage(); 
    bi.BeginInit(); 
    bi.UriSource = new Uri("MyImage.png", UriKind.Relative); 
    bi.EndInit(); 

    ib.ImageSource = bi; 
    ImageBtn.Background = ib; 
} 

NOTA A causa di eseguire questi blocchi di codici a BackgroundWorker, io uso Dispatcher di impostare la proprietà pulsante Sfondo

Così, quando ho eseguito il programma, System.NotSupportedException venuto in mente come di seguito:

Exception from HRESULT: 0x88982F50 
Error Code : -2003292336 
Message : No imaging component suitable to complete this operation was found. 
Source : PresentationCore 
Stack Trace : at System.Windows.Media.Imaging.BitmapDecoder.SetupDecoderFromUriOrStream(Uri uri, Stream stream, BitmapCacheOption cacheOption, Guid& clsId, Boolean& isOriginalWritable, Stream& uriStream, UnmanagedMemoryStream& unmanagedMemoryStream, SafeFileHandle& safeFilehandle) 
    at System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, RequestCachePolicy uriCachePolicy, Boolean insertInDecoderCache) 
    at System.Windows.Media.Imaging.BitmapImage.FinalizeCreation() 
    at System.Windows.Media.Imaging.BitmapSource.CompleteDelayedCreation() 
    at System.Windows.Media.Imaging.BitmapSource.get_WicSourceHandle() 
    at System.Windows.Media.Imaging.BitmapSource.get_DUCECompatiblePtr() 
    at System.Windows.Media.Imaging.BitmapSource.UpdateBitmapSourceResource(Channel channel, Boolean skipOnChannelCheck) 
    at System.Windows.Media.Imaging.BitmapSource.AddRefOnChannelCore(Channel channel) 
    at System.Windows.Media.Imaging.BitmapSource.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel(Channel channel) 
    at System.Windows.Media.ImageBrush.AddRefOnChannelCore(Channel channel) 
    at System.Windows.Media.Brush.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel(Channel channel) 
    at System.Windows.Media.RenderData.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel(Channel channel) 
    at System.Windows.UIElement.RenderContent(RenderContext ctx, Boolean isOnChannel) 
    at System.Windows.Media.Visual.UpdateContent(RenderContext ctx, VisualProxyFlags flags, Boolean isOnChannel) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle) 
    at System.Windows.Media.Visual.RenderRecursive(RenderContext ctx) 
    at System.Windows.Media.Visual.Render(RenderContext ctx, UInt32 childIndex) 
    at System.Windows.Media.CompositionTarget.Compile(Channel channel) 
    at System.Windows.Media.CompositionTarget.System.Windows.Media.ICompositionTarget.Render(Boolean inResize, Channel channel) 
    at System.Windows.Media.MediaContext.Render(ICompositionTarget resizedCompositionTarget) 
    at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget) 
    at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget) 
    at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 
    at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) 
    at System.Windows.Threading.DispatcherOperation.InvokeImpl() 
    at System.Threading.ExecutionContext.runTryCode(Object userData) 
    at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Windows.Threading.DispatcherOperation.Invoke() 
    at System.Windows.Threading.Dispatcher.ProcessQueue() 
    at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 
    at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 
    at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) 
    at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 
    at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) 
    at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) 
    at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) 
    at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) 
    at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) 
    at System.Windows.Application.RunDispatcher(Object ignore) 
    at System.Windows.Application.RunInternal(Window window) 
    at WPF_KSMMessenger.App.Main() in C:\Users\Hossein\Desktop\WPF_KSMMessenger\WPF_KSMMessenger\obj\x86\Debug\App.g.cs:line 0 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 

Cosa devo fare per risolvere questo problema?

Grazie per l'attenzione.

+2

Hai controllato il file stesso? è corretto? –

+1

Qual è il sistema operativo? I PNG in WPF su XP possono causare problemi. –

+1

@ Mr. Disappointment: sto usando Win7, non XP! –

risposta

11

Il tuo codice funziona bene per me su un'immagine casuale selezionata da immagini di Google, quindi la mia ipotesi è che l'immagine che stai scaricando abbia un problema di qualche tipo. Puoi provare il seguente codice nel gestore subito prima di Dispatcher.Invoke.

var encoder = new PngBitmapEncoder(); 
var image = new BitmapImage(new Uri("MyImage.png", UriKind.Relative)); 
encoder.Frames.Add(BitmapFrame.Create(image)); 

using (var stream = new FileStream("MyImage2.png", FileMode.Create, FileAccess.Write)) 
{ 
    encoder.Save(stream); 
} 

Quindi utilizzare "MyImage2.png". È un tentativo di fare in modo che l'encoder "aggiusti" l'immagine prima di caricarla nel pennello. Ad essere onesti, mentre questo codice funziona per me, quasi non ho postato questo perché non ho idea se funzionerà per la tua situazione, e non mi piace pubblicare il codice quando non conosco il risultato. Sicuramente fatemi sapere se aiuta.

+0

Grazie mille per la risposta. Ho testato il tuo codice, funziona bene in un progetto separato, ma, nel mio programma, ha ancora quel problema. –

+0

Puoi pubblicare un link ad una delle immagini problematiche? O caricane uno in qualche posto come imageshack? –

+0

Ho usato il link immagine avatar yahoo. Sto programmando un programma client di chat. Quindi, devo scaricare ed elaborare queste immagini. Sto usando il link http://img.msg.yahoo.com/avatar.php?format=png&yids= per scaricare le immagini. –

11

.png file con una dimensione zero del file darà questo errore identico.

Problemi correlati