mirror of https://github.com/quasar/Quasar.git
49 lines
1.5 KiB
C#
49 lines
1.5 KiB
C#
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.IO;
|
|
|
|
namespace xServer.Core.Compression
|
|
{
|
|
public class JpgCompression
|
|
{
|
|
private readonly ImageCodecInfo _encoderInfo;
|
|
private readonly EncoderParameters _encoderParams;
|
|
|
|
public JpgCompression(long quality)
|
|
{
|
|
EncoderParameter parameter = new EncoderParameter(Encoder.Quality, quality);
|
|
this._encoderInfo = GetEncoderInfo("image/jpeg");
|
|
this._encoderParams = new EncoderParameters(2);
|
|
this._encoderParams.Param[0] = parameter;
|
|
this._encoderParams.Param[1] = new EncoderParameter(Encoder.Compression, (long) EncoderValue.CompressionRle);
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
} |