/// <summary> /// Converts the image to a png stream, which can be assigned to /// a silverlight image control as image source and applies the specified /// filter before converting the image. /// </summary> /// <param name="image">The image, which should be converted. Cannot be null /// (Nothing in Visual Basic).</param> /// <param name="filter">The filter, which should be applied before converting the /// image or null, if no filter should be applied to. Cannot be null.</param> /// <returns>The resulting stream.</returns> /// <exception cref="ArgumentNullException"> /// <para><paramref name="image"/> is null (Nothing in Visual Basic).</para> /// <para>- or -</para> /// <para><paramref name="filter"/> is null (Nothing in Visual Basic).</para> /// </exception> public static Stream ToStream(this ExtendedImage image, IImageFilter filter) { Contract.Requires <ArgumentNullException>(image != null, "Image cannot be null."); Contract.Requires <ArgumentException>(image.IsFilled, "Image has not been loaded."); MemoryStream memoryStream = new MemoryStream(); try { ExtendedImage temp = image; if (filter != null) { temp = image.Clone(); filter.Apply(temp, image, temp.Bounds); } PngEncoder encoder = new PngEncoder(); encoder.IsWritingUncompressed = true; encoder.Encode(temp, memoryStream); memoryStream.Seek(0, SeekOrigin.Begin); } catch { if (memoryStream != null) { memoryStream.Dispose(); memoryStream = null; } throw; } return(memoryStream); }