From 9049ccc73ed9270857cca6bdd316d4cfe5fecb3c Mon Sep 17 00:00:00 2001 From: NYAN CAT <32758426+NYAN-x-CAT@users.noreply.github.com> Date: Mon, 16 Oct 2023 17:20:39 +0300 Subject: [PATCH] Create JpgCompression.cs --- .../Server/StreamLibrary/JpgCompression.cs | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 AsyncRAT-C#/Server/StreamLibrary/JpgCompression.cs diff --git a/AsyncRAT-C#/Server/StreamLibrary/JpgCompression.cs b/AsyncRAT-C#/Server/StreamLibrary/JpgCompression.cs new file mode 100644 index 0000000..8eab140 --- /dev/null +++ b/AsyncRAT-C#/Server/StreamLibrary/JpgCompression.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Server.StreamLibrary +{ + public class JpgCompression : IDisposable + { + private readonly ImageCodecInfo _encoderInfo; + private readonly EncoderParameters _encoderParams; + + public JpgCompression(long quality) + { + EncoderParameter parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality); + this._encoderInfo = GetEncoderInfo("image/jpeg"); + this._encoderParams = new EncoderParameters(2); + this._encoderParams.Param[0] = parameter; + this._encoderParams.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionRle); + } + + public void Dispose() + { + Dispose(true); + + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (_encoderParams != null) + { + _encoderParams.Dispose(); + } + } + } + + public byte[] Compress(Bitmap bmp) + { + using (MemoryStream stream = new MemoryStream()) + { + bmp.Save(stream, _encoderInfo, _encoderParams); + return stream.ToArray(); + } + } + + public void Compress(Bitmap bmp, ref Stream targetStream) + { + bmp.Save(targetStream, _encoderInfo, _encoderParams); + } + + private ImageCodecInfo GetEncoderInfo(string mimeType) + { + ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders(); + int num2 = imageEncoders.Length - 1; + for (int i = 0; i <= num2; i++) + { + if (imageEncoders[i].MimeType == mimeType) + { + return imageEncoders[i]; + } + } + return null; + } + } +}