﻿// Decompiled with JetBrains decompiler
// Type: InvokedCommon.Video.Compression.JpgCompression
// Assembly: InvokedCommon, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
// MVID: A935EE8A-7FFF-4BAB-94FD-31AEC4036FB9
// Assembly location: C:\Users\ian\Downloads\Telegram Desktop\fein\InvokedCommon.dll

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;


namespace InvokedCommon.Video.Compression
{
	public class JpgCompression : IDisposable
	{
		private readonly ImageCodecInfo _encoderInfo;
		private readonly EncoderParameters _encoderParams;

		public JpgCompression(long quality)
		{
			EncoderParameter encoderParameter = new EncoderParameter(Encoder.Quality, quality);
			this._encoderInfo = this.GetEncoderInfo("image/jpeg");
			this._encoderParams = new EncoderParameters(2);
			this._encoderParams.Param[0] = encoderParameter;
			this._encoderParams.Param[1] = new EncoderParameter(Encoder.Compression, 5L);
		}

		public void Dispose()
		{
			this.Dispose(true);
			GC.SuppressFinalize((object)this);
		}

		protected virtual void Dispose(bool disposing)
		{
			if (!disposing || this._encoderParams == null)
				return;
			this._encoderParams.Dispose();
		}

		public byte[] Compress(Bitmap bmp)
		{
			using (MemoryStream memoryStream = new MemoryStream())
			{
				bmp.Save((Stream)memoryStream, this._encoderInfo, this._encoderParams);
				return memoryStream.ToArray();
			}
		}

		public void Compress(Bitmap bmp, ref Stream targetStream)
		{
			bmp.Save(targetStream, this._encoderInfo, this._encoderParams);
		}

		private ImageCodecInfo GetEncoderInfo(string mimeType)
		{
			ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders();
			int num = imageEncoders.Length - 1;
			for (int index = 0; index <= num; ++index)
			{
				if (imageEncoders[index].MimeType == mimeType)
					return imageEncoders[index];
			}
			return (ImageCodecInfo)null;
		}
	}
}