private void RunBackgroundAddIn() { // Do the work. var changedPixels = _addin.ProcessImageBytes(_originalPixels); // Update the UI on the UI thread. Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate { var newSource = BitmapSource.Create( _originalSource.PixelWidth, _originalSource.PixelHeight, _originalSource.DpiX, _originalSource.DpiY, _originalSource.Format, _originalSource.Palette, changedPixels, _stride); ImageToProcess.Source = newSource; AddInProcessProgressBar.Value = 0; // Release the add-in (it's a member variable now, // so this step is explicit). _addin = null; } ); }
private void OnProcessImage(object sender, RoutedEventArgs e) { var token = (AddInToken)AddInListBox.SelectedItem; _addIn = token.Activate <ImageProcessorHostView>(AddInSecurityLevel.Host); var streamResourceInfo = Application.GetResourceStream(new Uri("Forest.jpg", UriKind.RelativeOrAbsolute)); if (streamResourceInfo != null) { var imageStream = streamResourceInfo.Stream; AddInBorder.Child = _addIn.GetVisual(imageStream); } }
private void OnProcessImage(object sender, RoutedEventArgs e) { // Get the byte array ready. _originalSource = (BitmapSource)ImageToProcess.Source; _stride = _originalSource.PixelWidth * _originalSource.Format.BitsPerPixel / 8; _stride = _stride + _stride % 4 * 4; _originalPixels = new byte[_stride * _originalSource.PixelHeight * _originalSource.Format.BitsPerPixel / 8]; _originalSource.CopyPixels(_originalPixels, _stride, 0); // Start the add-in. var token = (AddInToken)AddInListBox.SelectedItem; _addin = token.Activate <ImageProcessorHostView>(AddInSecurityLevel.Internet); _addin.Initialize(_automationHost); // Launch the image processing work on a separate thread. var thread = new Thread(RunBackgroundAddIn); thread.Start(); }