public static Image ProcessImage( object imageData )
{
Image image = new Image();
if (imageData is BitmapSource)
{
var img = new Image();
img.Source = imageData as ImageSource;
return img;
}
if( imageData is Image )
{
//If a WPF image was stored in the PluginDatas, we use its source to create a NEW image instance, to enable using it multiple times.
var img = new Image();
var bitmapImage = new BitmapImage( new Uri( ( (Image)imageData ).Source.ToString() ) )
{
CacheOption = BitmapCacheOption.OnLoad
};
img.Source = bitmapImage;
return img;
}
string imageString = imageData.ToString();
if( imageString.Length <= 260 && Uri.IsWellFormedUriString( imageString, UriKind.RelativeOrAbsolute ) && !imageString.StartsWith( "pack://" ) && File.Exists( imageString ) ) //Handles URis
{
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.UriSource = new Uri( imageString );
bitmapImage.EndInit();
image.Source = bitmapImage;
return image;
}
if( imageString.StartsWith( "pack://" ) ) //Handles the WPF "pack://" protocol
{
Image img = new Image();
ImageSourceConverter imsc = new ImageSourceConverter();
img.Source = (ImageSource)imsc.ConvertFromString( imageString );
return img;
}
byte[] imageBytes = Convert.FromBase64String( imageData.ToString() ); //Handles base 64 encoded images
using( MemoryStream ms = new MemoryStream( imageBytes ) )
{
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = ms;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
bitmapImage.Freeze();
image.Source = bitmapImage;
}
return image;
}