Example #1
0
        //public void OnSaveCVMatImage(object sender, OpenCvMatImageArgs e)
        //{
        //    subdivision++;
        //    if (subdivision == 120)
        //    {
        //        subdivision = 0;
        //        string fileName = "Images/Omni_" + DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss-fff") + ".jpg";

        //        // Create a Bitmap object based on a BMP file.
        //        myBitmap = new Bitmap(e.Mat.Bitmap);

        //        // Get an ImageCodecInfo object that represents the JPEG codec.
        //        myImageCodecInfo = GetEncoderInfo("image/jpeg");

        //        // Create an Encoder object based on the GUID

        //        // for the Quality parameter category.
        //        myEncoder = Encoder.Quality;

        //        // Create an EncoderParameters object.

        //        // An EncoderParameters object has an array of EncoderParameter

        //        // objects. In this case, there is only one

        //        // EncoderParameter object in the array.
        //        myEncoderParameters = new EncoderParameters(1);

        //        // Save the bitmap as a JPEG file with quality level 25.
        //        myEncoderParameter = new EncoderParameter(myEncoder, 80L);
        //        myEncoderParameters.Param[0] = myEncoderParameter;
        //        myBitmap.Save(fileName, myImageCodecInfo, myEncoderParameters);
        //    }
        //}

        public void OnSaveBitmapImage(object sender, BitmapImageArgs e)
        {
            subdivision++;
            if (subdivision == 120)
            {
                subdivision = 0;
                string fileName = "Images/Omni_" + DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss-fff") + ".jpg";

                // Create a Bitmap object based on a BMP file.
                // myBitmap = new Bitmap(e.Mat.Bitmap);

                // Get an ImageCodecInfo object that represents the JPEG codec.
                myImageCodecInfo = GetEncoderInfo("image/jpeg");

                // Create an Encoder object based on the GUID

                // for the Quality parameter category.
                myEncoder = Encoder.Quality;

                // Create an EncoderParameters object.

                // An EncoderParameters object has an array of EncoderParameter

                // objects. In this case, there is only one

                // EncoderParameter object in the array.
                myEncoderParameters = new EncoderParameters(1);

                // Save the bitmap as a JPEG file with quality level 25.
                myEncoderParameter           = new EncoderParameter(myEncoder, 80L);
                myEncoderParameters.Param[0] = myEncoderParameter;
                e.Bitmap.Save(fileName, myImageCodecInfo, myEncoderParameters);
            }
        }
Example #2
0
        /// <summary>
        /// 图片有损压缩
        /// </summary>
        public static MemoryStream GetLossyCompression(Bitmap bitmap, long quality, string mode = "W", int width = 800, int height = 450)
        {
            int x = 0;
            int y = 0;

            int ow = bitmap.Width;
            int oh = bitmap.Height;

            int towidth  = width;
            int toheight = height;

            switch (mode.ToUpper())
            {
            case "HW":    //指定高宽缩放(可能变形)
                break;

            case "W":    //指定宽,高按比例
                toheight = oh * towidth / ow;
                break;

            case "H":    //指定高,宽按比例
                towidth = ow * toheight / oh;
                break;

            case "CUT":    //指定高宽裁减(不变形)
                if ((double)ow / (double)oh > (double)towidth / (double)toheight)
                {
                    ow = oh * towidth / toheight;
                    y  = 0;
                    x  = (bitmap.Width - ow) / 2;
                }
                else
                {
                    oh = ow * toheight / towidth;
                    x  = 0;
                    y  = (bitmap.Height - oh) / 2;
                }
                break;

            default:
                break;
            }

            using (Image _bitmap = new Bitmap(towidth, toheight))
            {
                using (Graphics g = Graphics.FromImage(_bitmap))
                {
                    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    g.SmoothingMode     = SmoothingMode.HighQuality;
                    g.Clear(Color.Transparent);
                    g.DrawImage(bitmap, new Rectangle(0, 0, towidth, toheight),
                                new Rectangle(x, y, ow, oh),
                                GraphicsUnit.Pixel);
                    MemoryStream   ms = new MemoryStream();
                    ImageCodecInfo myImageCodecInfo          = GetEncoderInfo("image/jpeg");
                    System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
                    EncoderParameters myEncoderParameters    = new EncoderParameters(1);
                    EncoderParameter  myEncoderParameter     = new EncoderParameter(myEncoder, quality);
                    myEncoderParameters.Param[0] = myEncoderParameter;
                    _bitmap.Save(ms, myImageCodecInfo, myEncoderParameters);
                    return(ms);
                }
            }
        }