Take the following steps to start a project and to add some code that updates a gauge during processing and detects a user interrupt:
In the Solution Explorer window, right-click on the References folder for the project and select Add Reference... from the context menu. In the Reference Manager dialog box, select Leadtools.Controls from the Windows=>Extension list.
Browse to the <LEADTOOLS_INSTALLDIR>\Bin\WinRT8_1\ folder (depending on your target platform), and select the following .WINMD files:
Click the Select button and then press the OK button to add the above references to the application.
Open the MainPage.xaml file and copy the below XAML code into the editor:
[XAML]
<Page
x:Class="Updating_a_Guage.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Updating_a_Guage"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:custom="using:Leadtools.Controls"
mc:Ignorable="d">
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<StackPanel>
<Button x:Name="_loadButton" Click="_loadButton_Click">Load</Button>
<Button x:Name="_cmdButton" Click="_cmdButton_Click">Command</Button>
<ProgressBar x:Name="_progress" Minimum="0" Maximum="100"></ProgressBar>
<custom:RasterImageViewer x:Name="_viewer"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ImageHorizontalAlignment="Center"
ImageVerticalAlignment="Center"
SizeMode="Fit"
NewImageResetOptions="All"/>
</StackPanel>
</Grid>
</Page>
Double-click on the Package.appxmanifest file. On the Declarations tab, add the File Open Picker as a Supported Declaration. Also, check the Supports any file type checkbox.
Switch to MainPage.xaml code view (right-click Page.xaml in the solution explorer then select View Code) and add the following lines at the beginning of the file:
using Windows.Storage;
using Windows.Storage.Pickers;
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Converters;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
Add the following class function:
private async void _loadButton_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add(".cmp");
openPicker.FileTypeFilter.Add(".jpg");
openPicker.FileTypeFilter.Add(".tif");
StorageFile file = await openPicker.PickSingleFileAsync();
if (null != file)
{
try
{
//Open the file as a WinRT RandomAccessStream and create an ILeadStream from this RandomAccessStream
ILeadStream leadStream = LeadStreamFactory.Create(file);
using (IDisposable disposable = leadStream as IDisposable)
{
using (RasterCodecs codecs = new RasterCodecs())
{
_viewer.Image = await codecs.LoadAsync(leadStream);
}
}
}
catch (Exception exception)
{
string message = exception.Message;
RasterException rasterException = RasterException.FromHResult(exception.HResult);
if (rasterException != null)
message = rasterException.Message;
System.Diagnostics.Debug.WriteLine(message);
}
}
}
Add the following code to the MainPage class:
private RasterImage _image;
private bool _cancel;
private void _cancelButton_Click(object sender, RoutedEventArgs e)
{
_cancel = true;
}
private async void _cmdButton_Click(object sender, RoutedEventArgs e)
{
_image = _viewer.Image.Clone();
await Task.Run(() =>
{
MedianCommand cmd = new MedianCommand(40);
cmd.Progress += cmd_Progress;
_cancel = false;
try
{
cmd.Run(_image);
}
catch (Exception err)
{
string message = err.Message;
RasterException rasterException = RasterException.FromHResult(err.HResult);
if (rasterException != null)
message = rasterException.Message;
System.Diagnostics.Debug.WriteLine(message);
}
finally
{
cmd.Progress -= cmd_Progress;
}
});
if(_cancel != true)
await _viewer.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
() =>
{
_viewer.Image = _image;
});
}
async void cmd_Progress(object sender, RasterCommandProgressEventArgs e)
{
await _progress.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
() =>
{
e.Cancel = _cancel;
_progress.Value = e.Percent;//update progress bar
});
}
Build, and Run the program to test it. NOTE: If you encounter an "Invalid File Format" or "Feature Not Supported" exception, please refer to the topic Invalid File Format/Feature Not Supported.
Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET