«Не найдено ни одного компонента, подходящего для выполнения этой операции». - PullRequest
14 голосов
/ 03 сентября 2011

Я запрограммировал приложение для загрузки * .png файлов и установил его на фоне кнопки в WPF.Поэтому, когда я запускаю эту программу, она сталкивается с ошибкой как

Не найдено ни одного компонента обработки изображений, подходящего для выполнения этой операции. "

Мой код такой, как показано ниже:

Первое приложение загружает файл с объектом класса 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);

, и когда загрузка завершена, происходит событие:

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

ПРИМЕЧАНИЕ Потому чтодля запуска этих блоков кодов в BackgroundWorker, я использую Dispatcher для установки кнопки Background свойство

Итак, когда я запускаю программу, System.NotSupportedException происходит, как показано ниже:

Исключение из HRESULT: 0x88982F50 Код ошибки: -2003292336 Сообщение: не найден компонент формирования изображения, подходящий для выполнения этой операции Источник: трассировка стека PresentationCore: в System.Windows.Media.Imaging.BitmapDecoder.SetupDecoderFromUriOrStream (поток Uri uri, Stream, BitmapCacheOption cacheOption, Guid & clsId, Boolean & isOriginalWritable, Stream & uriStream, UnmanagedMemoryStream & unmanagedMemoryStream, SafeFileHandle & safeFilehandle) в System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream (URI baseUri, Uri uri, Потоковый поток, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, RequestCachePolicy uriCachePolicy, логический insertInDecoderCache.map.Id.Id.IdImaging.BitmapSource.CompleteDelayedCreation ()
в System.Windows.Media.Imaging.BitmapSource.get_WicSourceHandle ()
в System.Windows.Media.Imaging.BitmapSource.get_DUCECompatiblePtr () * 1030.edia в системе..Imaging.BitmapSource.UpdateBitmapSourceResource (канал канала, логическое значение skipOnChannelCheck) в System.Windows.Media.Imaging.BitmapSource.AddRefOnChannelCore (канал) в System.Windows.Media.Imaging.BitmapSource.Media.omia. WindowsIResource.AddRefOnChannel (канал канала) в System.Windows.Media.ImageBrush.AddRefOnChannelCore (канал канала)
в System.Windows.Media.Brush.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel (Канальный канал) в System.Windows.Media.RenderData.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel (Канальный канал) в System.Windows.UIElement.RenderContent (RenderContext ctx, логический isOnChannel) в System.WindowsОбъектWindows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Vis.ed.edistv для System.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (дескриптор RenderContext ctx, ResourceHandleis.Rec.(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildourcehlend Render) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContextW).Media.Visual.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) вSystem.Windows.Media.Visual.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (RenderContext.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Vis.ed.edistv для System.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (дескриптор RenderContext ctx, ResourceHandleis.Rec.(RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visild.UrenTexteh.обрабатывать) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext).Windows.Media.Visual.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (дескриптор RenderContext System.Windows).Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Wdh для Windows.(RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (дескриптор RenderContext ctx, ResourceHandle) в System.Windows.MxtiaRenderRecis.ctx) at System.Windows.Media.Visual.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (RenderContextChindle).Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext.Windows) att.Visual.UpdateChildren (RenderContext ctx, дескриптор ResourceHandle) в System.Windows.Media.Visual.RenderRecursive (RenderContext ctx) в System.Windows.Media.Visual.Render (RenderContext ctx, UInt32 childIndexMedia.Targe.Tom.Tom.Tom.Tom.Tom.Tom.Tom.Tom.Tom.Tom.Tom.Tom.Com.Tom.Tom.Tom.Tom.Com.T.T.Компиляция (канал канала) в System.Windows.Media.CompositionTarget.System.Windows.Media.ICompositionTarget.Render (логический inResize, канал канала) в System.Windows.Media.MediaContext.Render (ICompositionTarget resizedCompositionTarget) в System.Windows.Media..Средства массовой информацииContext.RenderMessageHandlerCore (Object resizedCompositionTarget) в System.Windows.Media.MediaContext.RenderMessageHandler (Object resizedCompositionTarget) в System.Windows.Threading.ExceptionWrapper.InternalRealCall (обратный вызов делегата. Объектный арг. Intread.Inter.TryCatchWhen (Источник объекта, метод Delegate, аргументы объекта, Int32 numArgs, Delegate catchHandler) в System.Windows.Threading.DispatcherOperation.InvokeImpl () в System.Threading.ExecutionContext.runTryCode (Object userData) в System.Runtime.CompilerSerpersRus.ExecuteCodeWithGuaranteedCleanup (код TryCode, backoutCode CleanupCode, Object userData) вSystem.Threading.ExecutionContext.Run (ExecutionContext executeContext, ContextCallback обратный вызов, состояние объекта, логическое значение ignoreSyncCtx) в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Windows.Threading.DispatcherOperation.Invoke () в System.Windows.Threading.Dispatcher.ProcessQueue () в System.Windows.Threading.Dispatcher.WndProcHook (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean и обрабатываются) в MS.Win32.HwndWrapper.WndProc (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & handled) в MS.Win32.HwndSubclass.DispatcherCallbackOperation (Object o) в System.Windows.Threading.ExceptionWrapper.InternalRealCall (Делегат обратный вызов, объектные аргументы, Int32 numArgs) в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (Объект источник, метод делегата, аргументы объекта, int32 numArgs, делегат catchHandler) в System.Windows.Threading.Dispatcher.InvokeImpl (DispatcherPriority приоритет, время ожидания TimeSpan, метод делегата, аргументы объекта, Int32 numArgs) в MS.Win32.HwndSubclass.SubclassWndProc (IntPtr hwnd, Интеллектуальный интервал времени: 32 мкс, IntPtr wParam, IntPtr lParam) MS.Win32.UnsafeNativeMethods.DispatchMessage (MSG & msg) в System.Windows.Threading.Dispatcher.PushFrameImpl (DispatcherFrame frame) в System.Windows.Application.RunDispatcher (игнорирование объекта)
в System.Windows.Application.RunInternal (окно окна) в WPF_KSMMessenger.App.Main () в C: \ Users \ Хоссейн \ Desktop \ WPF_KSMMessenger \ WPF_KSMMessenger \ OBJ \ x86 \ Debug \ App.g.cs: линия 0 в System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, Строка [] args) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()
в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, ContextCallback обратный вызов, состояние объекта, логическое значение ignoreSyncCtx) в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadHelper.ThreadStart ()

Что я должен сделать, чтобы решить эту проблему?

Спасибо за внимание.

Ответы [ 2 ]

12 голосов
/ 13 марта 2012

.png файлы с нулевым размером файла приведут к такой же ошибке.

11 голосов
/ 03 сентября 2011

Ваш код отлично работает для меня на случайном изображении, выбранном из изображений Google, поэтому я предполагаю, что загружаемое изображение имеет какую-то проблему.Вы можете попробовать следующий код в обработчике прямо перед 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 );
}

Затем используйте «MyImage2.png».Это попытка заставить кодировщик «исправить» изображение перед загрузкой в ​​кисть.Если честно, хотя этот код работает для меня, я почти не публиковал его, потому что понятия не имею, будет ли он работать в вашей ситуации, и мне не нравится публиковать код, когда я не знаю результата.Обязательно дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...