/// <summary>
/// Handles the RunWorkerCompleted event of the renderThread control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.ComponentModel.RunWorkerCompletedEventArgs"/> instance containing the event data.</param>
private void renderThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
if (enqueueExport != null) //cancelled because new image was requested. Create new image
{
GetSource(enqueueExport, enqueueOnComplete);
enqueueExport = null;
enqueueOnComplete = null;
}
return;
}
enqueueExport = null;
enqueueOnComplete = null;
if (e.Result == null)
{
return;
}
object[] result = (object[])e.Result;
int width = (int)result[1];
int height = (int)result[2];
Envelope extent = (Envelope)result[3];
OnImageComplete onComplete = (OnImageComplete)result[4];
#if SILVERLIGHT
BitmapImage image = new BitmapImage();
PngEncoder ei = (PngEncoder)result[0];
image.SetSource(ei.GetImageStream());
#else
List <Color> colors = new List <Color>();
colors.Add(Colors.Violet);
colors.Add(Colors.Yellow);
BitmapPalette palette = new BitmapPalette(colors);
System.Windows.Media.PixelFormat pf =
System.Windows.Media.PixelFormats.Bgra32;
int stride = width * (pf.BitsPerPixel / 8);
BitmapSource image = BitmapSource.Create(width, height, 96, 96, pf, palette, (int[])result[0], stride);
#endif
onComplete(image, new ImageResult(extent));
}