//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); } }
/// <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); } } }