initial commit
Pulsar .NET 9.0 Windows Release / build (push) Canceled after 0s
Mirror to Codeberg and Gitea / mirror (push) Canceled after 0s

This commit is contained in:
i2p
2026-08-27 10:57:58 -06:00
commit 773d05f8f1
1038 changed files with 109261 additions and 0 deletions
@@ -0,0 +1,59 @@
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
namespace Pulsar.Common.Video.Compression
{
public class JpgCompression : IDisposable
{
private static readonly ImageCodecInfo JpegEncoderInfo = GetEncoderInfoStatic();
private readonly EncoderParameters _encoderParams;
public JpgCompression(long quality)
{
EncoderParameter parameter = new EncoderParameter(Encoder.Quality, quality);
_encoderParams = new EncoderParameters(1);
_encoderParams.Param[0] = parameter;
}
public void Dispose()
{
if (_encoderParams != null)
{
_encoderParams.Dispose();
}
GC.SuppressFinalize(this);
}
public byte[] Compress(Bitmap bmp)
{
if (bmp == null) throw new ArgumentNullException(nameof(bmp));
using (MemoryStream stream = new MemoryStream())
{
bmp.Save(stream, JpegEncoderInfo, _encoderParams);
return stream.ToArray();
}
}
public void Compress(Bitmap bmp, Stream targetStream)
{
if (bmp == null) throw new ArgumentNullException(nameof(bmp));
if (targetStream == null) throw new ArgumentNullException(nameof(targetStream));
bmp.Save(targetStream, JpegEncoderInfo, _encoderParams);
}
private static ImageCodecInfo GetEncoderInfoStatic()
{
ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders();
for (int i = 0; i < imageEncoders.Length; i++)
{
if (imageEncoders[i].MimeType == "image/jpeg")
{
return imageEncoders[i];
}
}
throw new InvalidOperationException("JPEG encoder not found");
}
}
}