public void MouseLeftButtonDownAction(object sender, MouseButtonEventArgs e) { ToClientV.MySelf.Visibility = System.Windows.Visibility.Collapsed; UIElement rootUI = App.Current.RootVisual; WriteableBitmap wb = new WriteableBitmap(rootUI, null); int width = wb.PixelWidth; int height = wb.PixelHeight; int bands = 3; byte[][,] raster = new byte[bands][,]; for (int i = 0; i < bands; i++) { raster[i] = new byte[width, height]; } for (int row = 0; row < height; row++) { for (int column = 0; column < width; column++) { int pixel = wb.Pixels[width * row + column]; raster[0][column, row] = (byte)(pixel >> 16); raster[1][column, row] = (byte)(pixel >> 8); raster[2][column, row] = (byte)pixel; } } FluxJpeg.Core.ColorModel model = new FluxJpeg.Core.ColorModel { colorspace = FluxJpeg.Core.ColorSpace.RGB }; FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model, raster); MemoryStream stream = new MemoryStream(); FluxJpeg.Core.Encoder.JpegEncoder encoder = new FluxJpeg.Core.Encoder.JpegEncoder(img, 100, stream); encoder.Encode(); stream.Seek(0, SeekOrigin.Begin); byte[] binaryData = stream.ToArray(); Command.Execute(binaryData); ToClientV.MySelf.Visibility = System.Windows.Visibility.Visible; }
public void SaveToJPEG(WriteableBitmap bitmap, Stream stream) { #if SILVERLIGHT FluxJpeg.Core.Encoder.JpegEncoder encoder = new FluxJpeg.Core.Encoder.JpegEncoder(WriteableBitmapToFJCoreImage(bitmap), 100, stream); encoder.Encode(); #else JpegBitmapEncoder encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bitmap)); encoder.Save(stream); #endif }
// as found here: http://blog.blueboxes.co.uk/2009/07/21/rendering-xaml-to-a-jpeg-using-silverlight-3/ // also see attribution to SO post here: http://stackoverflow.com/questions/1139200/using-fjcore-to-encode-silverlight-writeablebitmap private static void SaveBitmapToJpeg(WriteableBitmap bitmap, Stream fs) { //Convert the Image to pass into FJCore int width = bitmap.PixelWidth; int height = bitmap.PixelHeight; int bands = 3; byte[][,] raster = new byte[bands][, ]; for (int i = 0; i < bands; i++) { raster[i] = new byte[width, height]; } for (int row = 0; row < height; row++) { for (int column = 0; column < width; column++) { int pixel = bitmap.Pixels[width * row + column]; raster[0][column, row] = (byte)(pixel >> 16); raster[1][column, row] = (byte)(pixel >> 8); raster[2][column, row] = (byte)pixel; } } ColorModel model = new ColorModel { colorspace = ColorSpace.RGB }; FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model, raster); //Encode the Image as a JPEG MemoryStream stream = new MemoryStream(); FluxJpeg.Core.Encoder.JpegEncoder encoder = new FluxJpeg.Core.Encoder.JpegEncoder(img, 100, stream); encoder.Encode(); //Move back to the start of the stream stream.Seek(0, SeekOrigin.Begin); //Get the Bytes and write them to the stream byte[] binaryData = new Byte[stream.Length]; long bytesRead = stream.Read(binaryData, 0, (int)stream.Length); fs.Write(binaryData, 0, binaryData.Length); }
/// <summary> /// Encode raster information to MemoryStream /// </summary> /// <param name="raster">Raster information (Array of bytes)</param> /// <param name="colorSpace">ColorSpace used</param> /// <returns>MemoryStream</returns> public static MemoryStream EncodeRasterInformationToStream(byte[][,] raster, ColorSpace colorSpace) { ColorModel model = new ColorModel { colorspace = ColorSpace.RGB }; FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model, raster); //Encode the Image as a JPEG MemoryStream stream = new MemoryStream(); FluxJpeg.Core.Encoder.JpegEncoder encoder = new FluxJpeg.Core.Encoder.JpegEncoder(img, 100, stream); encoder.Encode(); // Back to the start stream.Seek(0, SeekOrigin.Begin); return(stream); }
public void MouseLeftButtonUpAction(object sender, MouseButtonEventArgs e) { if (!ended) { return; } isPressed = false; WriteableBitmap twb = new WriteableBitmap(ShotGrid, null); int width = twb.PixelWidth; int height = twb.PixelHeight; int bands = 3; byte[][,] raster = new byte[bands][,]; for (int i = 0; i < bands; i++) { raster[i] = new byte[width, height]; } for (int row = 0; row < height; row++) { for (int column = 0; column < width; column++) { int pixel = twb.Pixels[width*row+column]; raster[0][column, row] = (byte)(pixel >> 16); raster[1][column, row] = (byte)(pixel >> 8); raster[2][column, row] = (byte)pixel; } } FluxJpeg.Core.ColorModel model = new FluxJpeg.Core.ColorModel { colorspace = FluxJpeg.Core.ColorSpace.RGB }; FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model, raster); MemoryStream stream = new MemoryStream(); FluxJpeg.Core.Encoder.JpegEncoder encoder = new FluxJpeg.Core.Encoder.JpegEncoder(img, 100, stream); encoder.Encode(); stream.Seek(0, SeekOrigin.Begin); byte[] binaryData = stream.ToArray(); save.Execute(binaryData); p.Children.Remove(this); ended = false; }
/// <summary> /// Encode raster information to MemoryStream /// </summary> /// <param name="raster">Raster information (Array of bytes)</param> /// <param name="colorSpace">ColorSpace used</param> /// <returns>MemoryStream</returns> public static MemoryStream EncodeRasterInformationToStream(byte[][,] raster, ColorSpace colorSpace) { ColorModel model = new ColorModel { colorspace = ColorSpace.RGB }; FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model, raster); //Encode the Image as a JPEG MemoryStream stream = new MemoryStream(); FluxJpeg.Core.Encoder.JpegEncoder encoder = new FluxJpeg.Core.Encoder.JpegEncoder(img, 100, stream); encoder.Encode(); // Back to the start stream.Seek(0, SeekOrigin.Begin); return stream; }