Beispiel #1
0
        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();
        }
Beispiel #2
0
 static MemoryStream Encode(Image image)
 {
     MemoryStream outStream = new MemoryStream();
     JpegEncoder encoder = new JpegEncoder(image, 85, outStream);
     encoder.Encode();
     outStream.Seek(0, SeekOrigin.Begin);
     return outStream;
 }
        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;
        }
Beispiel #4
0
        public static void EncodeJpeg(WriteableBitmap bmp, Stream dstStream)
        {
            // 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[h, w];
            pixelsForJpeg[1] = new byte[h, w];
            pixelsForJpeg[2] = new byte[h, w];

            // Copy WriteableBitmap data into buffer for FluxJpeg
            int i = 0;
            for (int x = 0; x < w; x++)
            {
                for (int y = 0; y < h; y++)
                {
                    int color = p[i++];
                    // Swap x and y coordinates to cheaply rotate the image 90° clockwise
                    pixelsForJpeg[0][y, x] = (byte)(color >> 16); // R
                    pixelsForJpeg[1][y, x] = (byte)(color >> 8);  // G
                    pixelsForJpeg[2][y, x] = (byte)(color);       // B
                }
            }

            using (MemoryStream memStream = new MemoryStream())
            {
                //Encode Image as JPEG
                var jpegImage = new FluxJpeg.Core.Image(new ColorModel { colorspace = ColorSpace.RGB }, pixelsForJpeg);
                var encoder = new JpegEncoder(jpegImage, 95, memStream);
                encoder.Encode();

                // Seek to begin of stream and write the encoded bytes to the FileSteram
                memStream.Seek(0, SeekOrigin.Begin);
                // Use the new .Net 4 CopyTo method :)
                memStream.CopyTo(dstStream);
            }
        }
Beispiel #5
0
        private Stream ResizeImage(Stream image_stream, int width, int height, int quality, ImageType type)
        {
            try {
                // Load the image as a writeablebitmap
                WriteableBitmap writableBitmap;
                BitmapImage bitmapImage = new BitmapImage();
                bitmapImage.SetSource(image_stream);
                writableBitmap = new WriteableBitmap(bitmapImage);

                double scale = Math.Min((double) width / writableBitmap.PixelWidth, (double) height / writableBitmap.PixelHeight);

                // No resize needed
                if (scale >= 1.0)
                    return image_stream;

                // Setup shorter names and pixelbuffers
                int w = writableBitmap.PixelWidth;
                int h = writableBitmap.PixelHeight;
                int[] p = writableBitmap.Pixels;
                byte[][,] imageRaster = new byte[3][,]; // RGB colors
                imageRaster[0] = new byte[w, h];
                imageRaster[1] = new byte[w, h];
                imageRaster[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++];

                        imageRaster[0][x, y] = (byte) (color >> 16); // R
                        imageRaster[1][x, y] = (byte) (color >> 8);  // G
                        imageRaster[2][x, y] = (byte) (color);       // B
                    }
                }

                // Create new FluxJpeg image based on pixel data
                FluxJpeg.Core.Image jpegImage = new FluxJpeg.Core.Image(new ColorModel {
                    colorspace = ColorSpace.RGB
                }, imageRaster);

                // Calc new proportional size
                width = (int) Math.Round(writableBitmap.PixelWidth * scale);
                height = (int) Math.Round(writableBitmap.PixelHeight * scale);

                // Resize the image
                ImageResizer resizer = new ImageResizer(jpegImage);
                Image resizedImage = resizer.Resize(width, height, FluxJpeg.Core.Filtering.ResamplingFilters.LowpassAntiAlias);
                Stream imageStream = new MemoryStream();

                if (type == ImageType.Jpeg) {
                    // Encode the resized image as Jpeg
                    JpegEncoder jpegEncoder = new JpegEncoder(resizedImage, quality, imageStream);
                    jpegEncoder.Encode();
                } else {
                    int[] pixelBuffer = new int[resizedImage.Height * resizedImage.Width];
                    byte[][,] resizedRaster = resizedImage.Raster;

                    // Convert FJCore raster to PixelBuffer
                    for (int y = 0; y < resizedImage.Height; y++) {
                        for (int x = 0; x < resizedImage.Width; x++) {
                            int color = 0;

                            color = color | resizedRaster[0][x, y] << 16; // R
                            color = color | resizedRaster[1][x, y] << 8;  // G
                            color = color | resizedRaster[2][x, y];       // B

                            pixelBuffer[(y * resizedImage.Width) + x] = color;
                        }
                    }

                    // Encode the resized image as Png
                    PngEncoder pngEncoder = new PngEncoder(pixelBuffer, resizedImage.Width, resizedImage.Height, false, PngEncoder.FILTER_NONE, Deflater.BEST_COMPRESSION);
                    byte[] pngBuffer = pngEncoder.pngEncode();
                    imageStream.Write(pngBuffer, 0, pngBuffer.Length);
                }

                return imageStream;
            } catch {
                // Ignore the error and let the server resize the image
            }

            return image_stream;
        }
Beispiel #6
0
        //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();
        }
Beispiel #7
0
        /// <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;
        }
Beispiel #8
0
 public string ImportarImagen(string NombreArchivo)
 {
     string MyPicturesPath = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
     string FilePath = MyPicturesPath + "\\" + NombreArchivo + ".jpg";
     string TempPath = MyPicturesPath + "\\Temp.jpg";
     try
     {
         OpenFileDialog dialog = new OpenFileDialog();
         dialog.Filter = "Imagenes |*.jpg;*.png;*.bmp";
         if (dialog.ShowDialog() == true)
         {
             if (File.Exists(FilePath))
             {
                 File.Delete(FilePath);
             }
             File.Copy(dialog.File.FullName, FilePath);
             long fileLength = new FileInfo(FilePath).Length;
             //MessageBox.Show("tamaño anterior: " + fileLength);
             //Si la imagen escaneada es mayor 50Kb, se itera reduciendo la imagen a la mitad de su tamaño
             while (fileLength > 51200)
             {
                 if (File.Exists(TempPath))
                 {
                     File.Delete(TempPath);
                 }
                 if (File.Exists(FilePath))
                 {
                     File.Copy(FilePath, TempPath);
                     File.Delete(FilePath);
                 }
                 using (Stream Stream = File.OpenRead(TempPath))
                 {
                     BitmapImage image = new BitmapImage();
                     image.SetSource(Stream);
                     MemoryStream outStream = new MemoryStream();
                     Stream.Seek(0, SeekOrigin.Begin);
                     JpegDecoder decoder = new JpegDecoder(Stream);
                     DecodedJpeg jpeg = decoder.Decode();
                     ImageResizer resizer = new ImageResizer(jpeg.Image);
                     FluxJpeg.Core.Image small = resizer.Resize(Convert.ToInt32(Math.Floor(image.PixelWidth / 2)), Convert.ToInt32(Math.Floor(image.PixelHeight / 2)), ResamplingFilters.NearestNeighbor);
                     JpegEncoder encoder = new JpegEncoder(small, 90, outStream);
                     encoder.Encode();
                     outStream.Seek(0, SeekOrigin.Begin);
                     int bufferSize = Convert.ToInt32(outStream.Length);
                     byte[] buffer = new byte[bufferSize];
                     outStream.Read(buffer, 0, bufferSize);
                     outStream.Close();
                     Stream.Close();
                     File.WriteAllBytes(FilePath, buffer);
                 }
                 if (File.Exists(TempPath))
                 {
                     File.Delete(TempPath);
                 }
                 fileLength = new FileInfo(FilePath).Length;
             }
             return FilePath;
         }
         else
         {
             return "Error: No se selecciono ningún archivo";
         }
     }
     catch (Exception ex)
     {
         return ("Error de Aplicación: " + ex.Message);
         //return "";
     }
 }
Beispiel #9
0
        public void getAsEncodedStream(Stream imageStream, string type = null, int quality = 90)
        {
            if (type != null) {
                type = this.type != "" ? this.type : JPEG.MIME;
            }

            if (type == JPEG.MIME) // Encode as JPEG
            {
                byte[][,] raster = _bm.ToRaster();

                FluxJpeg.Core.Image jpegImage = new FluxJpeg.Core.Image(new ColorModel {
                    colorspace = ColorSpace.RGB
                }, raster);

                JpegEncoder jpegEncoder = new JpegEncoder(jpegImage, quality, imageStream);
                jpegEncoder.Encode();

                // TODO: restore jpeg headers here
            }
            else if (type == PNG.MIME) // Encode as PNG
            {
                PngEncoder pngEncoder = new PngEncoder(_bm.Pixels, _bm.PixelWidth, _bm.PixelHeight, false, PngEncoder.FILTER_NONE, Deflater.BEST_COMPRESSION);
                byte[] pngBuffer = pngEncoder.pngEncode();
                imageStream.Write(pngBuffer, 0, pngBuffer.Length);
            }
            else
            {
                Error(this, null);
            }
        }
Beispiel #10
0
        public MemoryStream getAsEncodedStream(string type = null, int quality = 90)
        {
            MemoryStream imageStream = new MemoryStream();

            if (type != null) {
                type = this.type != "" ? this.type : JPEG.MIME;
            }

            if (type == JPEG.MIME) // Encode as JPEG
            {
                byte[][,] raster = _bm.ToRaster();

                FluxJpeg.Core.Image jpegImage = new FluxJpeg.Core.Image(new ColorModel {
                    colorspace = ColorSpace.RGB
                }, raster);

                JpegEncoder jpegEncoder = new JpegEncoder(jpegImage, quality, imageStream);
                jpegEncoder.Encode();

                if (_img != null) {
                    // strip off any headers that might be left by encoder, etc
                    imageStream = new MemoryStream(((JPEG)_img).stripHeaders(imageStream));

                    if (_preserveHeaders) {
                        imageStream = new MemoryStream(((JPEG)_img).insertHeaders(imageStream));
                    }
                }
            }
            else if (type == PNG.MIME) // Encode as PNG
            {
                PngEncoder pngEncoder = new PngEncoder(_bm.Pixels, _bm.PixelWidth, _bm.PixelHeight, false, PngEncoder.FILTER_NONE, Deflater.BEST_COMPRESSION);
                byte[] pngBuffer = pngEncoder.pngEncode();
                imageStream.Write(pngBuffer, 0, pngBuffer.Length);
            }
            else
            {
                Error(this, null);
                return null;
            }
            return imageStream;
        }
 void UploadFrame(WriteableBitmap bmp, string kind, string fileName, bool replace)
 {
     PlaySound("shutter");
     int W = bmp.PixelWidth;
     int H = bmp.PixelHeight;
     byte[][,] buf = FJ.Image.CreateRaster(W, H, 3);
     int[] pix = bmp.Pixels;
     for (int y = 0; y < H; ++y)
     {
         for (int x = 0, i = y * W; x < W; ++x, ++i)
         {
             int n = pix[i];
             buf[0][x,y] = (byte)((n >> 16) & 255);
             buf[1][x,y] = (byte)((n >> 8) & 255);
             buf[2][x,y] = (byte)(n & 255);
         }
     }
     MemoryStream stream = new MemoryStream();
     FJ.Image img = new FJ.Image(new FJ.ColorModel { colorspace = FJ.ColorSpace.RGB }, buf);
     JpegEncoder enc = new JpegEncoder(img, 80, stream);
     enc.Encode();
     stream.Seek(0, SeekOrigin.Begin);
     Form form = new Form();
     form["name"] = nameTextField.Text;
     form["pin"] = m_verified;
     form["kind"] = kind;
     form["width"] = W.ToString();
     form["height"] = H.ToString();
     if (replace)
     {
         form["replace"] = "replace";
     }
     form.Add(new FileData("file", stream, stream.Length, "image/jpeg", System.IO.Path.GetFileNameWithoutExtension(fileName) + ".jpg"));
     form.Submit(WebRequest.CreateHttp(m_baseUrl + "upload"), (FormSubmissionEventArgs e) =>
     {
         if (!e.Success)
         {
             PlaySound("error");
             SetMode(Mode.Disconnected);
             if (e.Response != null && e.Response.StatusCode == HttpStatusCode.NotFound)
             {
                 SetReason(Reason.Rejected);
             }
             else
             {
                 SetReason(Reason.NoConnection);
             }
         }
     }, Dispatcher);
 }
Beispiel #12
0
        /// <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 System.IO.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
            System.IO.MemoryStream stream = new System.IO.MemoryStream();
            FluxJpeg.Core.Encoder.JpegEncoder encoder = new FluxJpeg.Core.Encoder.JpegEncoder(img, 100, stream);
            encoder.Encode();
            
            // Back to the start
            stream.Seek(0, System.IO.SeekOrigin.Begin);

            return stream;
        }
Beispiel #13
0
        public static void EncodeJpeg(byte[] p, int h_in,int w_in, Stream dstStream)
        {
            // Init buffer in FluxJpeg format
            int w = w_in;
            int h = h_in;
            
            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 = h-1; y >=0 ; y--)
            {
                for (int x = 0; x < w; x++)
                {   
                        
                        pixelsForJpeg[2][x, y] = p[i++]; // R
                        pixelsForJpeg[1][x, y] = p[i++]; // G
                        pixelsForJpeg[0][x, y] = p[i++]; // B
                        i++;
                }
            }

            //Encode Image as JPEG
            var jpegImage = new FluxJpeg.Core.Image(new ColorModel { colorspace = ColorSpace.RGB }, pixelsForJpeg);
            var encoder = new JpegEncoder(jpegImage, 95, dstStream);
            encoder.Encode();
        }