2011-09-03 10 views
13

Zaprogramowałem aplikację, która musi pobrać pliki * .png i ustawić ją w tle przycisku w WPF. Tak więc, kiedy uruchomić ten program, to wychodzi na błąd co"Nie znaleziono komponentu obrazującego odpowiedniego do wykonania tej operacji."

Żaden składnik obrazowania nadaje się do wykonania tej operacji został znaleziony „

Moje kodu jest jak poniżej:.

Pierwsze pliki do pobrania aplikacji plik z obiektu klasy webclient za:

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); 

i gdy pobieranie zakończone zdarzenie miało miejsce:

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; 
} 

UWAGA powodu prowadzenia tych bloków kodów w BackgroundWorker używam dyspozytorowi ustawić właściwość tle Przycisk

Więc, gdy uruchamiam program, System.NotSupportedException wystąpił jak poniżej:

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() 

Co należy zrobić, aby rozwiązać ten problem?

Dziękuję za uwagę.

+2

Czy sprawdziłeś sam plik? czy to jest poprawne? –

+1

Co to jest system operacyjny? Pliki PNG w WPF na XP mogą powodować problemy. –

+1

@ Mr. Disappointment: Używam Win7, a nie XP! –

Odpowiedz

11

Twój kod działa dobrze dla mnie na losowym obrazie wybranym z obrazów Google, więc domyślam się, że obraz, który pobierasz, ma jakiś problem. Możesz wypróbować poniższy kod w module obsługi bezpośrednio przed komendą 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); 
} 

Następnie użyj "MyImage2.png". Jest to próba zmuszenia enkodera do "naprawienia" obrazu przed załadowaniem go do pędzla. Szczerze mówiąc, podczas gdy ten kod działa dla mnie, prawie nie opublikowałem tego, ponieważ nie mam pojęcia, czy to zadziała w twojej sytuacji, i nie lubię publikowania kodu, gdy nie znam wyniku. Zdecydowanie daj mi znać, jeśli to pomoże.

+0

Dziękuję bardzo za odpowiedź. Przetestowałem twój kod, działa dobrze w oddzielnym projekcie, ale w moim programie nadal ma ten problem. –

+0

Czy możesz zamieścić link do jednego z obrazów problemów? Lub przesłać jeden do czegoś takiego jak imagehack? –

+0

Używam linku do obrazu avahoo. Programuję program klienta czatu. Muszę więc pobrać i przetworzyć te obrazy. Używam linku http://img.msg.yahoo.com/avatar.php?format=png&yids= , aby pobrać obrazy. –

11

.png pliki o zerowym rozmiarze pliku dadzą ten identyczny błąd.

Powiązane problemy