private static void SaveToJPG(WriteableBitmap bitmap, Stream stream) { 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); JpegEncoder encoder = new JpegEncoder(img, JpgQuality, stream); encoder.Encode(); }
public Image(ColorModel cm, byte[][,] raster) { width = raster[0].GetLength(0); height = raster[0].GetLength(1); _cm = cm; _raster = raster; }
public static Stream Encode(WriteableBitmap bitmap, int quality) { //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(); JpegEncoder encoder = new JpegEncoder(img, quality, stream); encoder.Encode(); //Move back to the start of the stream stream.Flush(); stream.Seek(0, SeekOrigin.Begin); return stream; }
//http://kodierer.blogspot.com/2009/11/convert-encode-and-decode-silverlight.html public static void EncodeJpeg(WriteableBitmap bmp, Stream destinationStream) { // Init buffer in FluxJpeg format int w = bmp.PixelWidth; int h = bmp.PixelHeight; int[] p = bmp.Pixels; byte[][,] pixelsForJpeg = new byte[3][,]; // RGB colors pixelsForJpeg[0] = new byte[w, h]; pixelsForJpeg[1] = new byte[w, h]; pixelsForJpeg[2] = new byte[w, h]; // Copy WriteableBitmap data into buffer for FluxJpeg int i = 0; for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { int color = p[i++]; pixelsForJpeg[0][x, y] = (byte)(color >> 16); // R pixelsForJpeg[1][x, y] = (byte)(color >> 8); // G pixelsForJpeg[2][x, y] = (byte)(color); // B } } // Encode Image as JPEG using the FluxJpeg library // and write to destination stream ColorModel cm = new ColorModel { colorspace = ColorSpace.RGB }; FluxJpeg.Core.Image jpegImage = new FluxJpeg.Core.Image(cm, pixelsForJpeg); JpegEncoder encoder = new JpegEncoder(jpegImage, 95, destinationStream); encoder.Encode(); }
/// <summary> /// 老外写的方法:将WriteableBitmap转化为base64位字符串 /// </summary> /// <param name="bitmap"></param> /// <returns></returns> private string GetBase64Image(WriteableBitmap bitmap) { 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); MemoryStream stream = new MemoryStream(); JpegEncoder encoder = new JpegEncoder(img, 100, stream); encoder.Encode(); stream.Seek(0, SeekOrigin.Begin); byte[] binaryData = new Byte[stream.Length]; long bytesRead = stream.Read(binaryData, 0, (int)stream.Length); string base64String = System.Convert.ToBase64String(binaryData, 0, binaryData.Length); return base64String; }
/// <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 static Image FromBitmap(Bitmap bitmap) { int width = bitmap.Width; int height = bitmap.Height; int bands = 3; byte[][,] raster = new byte[bands][,]; for (int i = 0; i < bands; i++) { raster[i] = new byte[width, height]; } BitmapData bd = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); int[] pixels = new int[bd.Width * bd.Height]; Marshal.Copy(bd.Scan0, pixels, 0, pixels.Length); bitmap.UnlockBits(bd); for (int row = 0; row < height; row++) { for (int column = 0; column < width; column++) { int pixel = 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 }; return new Image(model, raster); }