52 lines
1.8 KiB
C#
52 lines
1.8 KiB
C#
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.IO;
|
|
|
|
namespace Client.StreamLibrary.src
|
|
{
|
|
public class LzwCompression
|
|
{
|
|
private EncoderParameter parameter;
|
|
private ImageCodecInfo encoderInfo;
|
|
private EncoderParameters encoderParams;
|
|
|
|
public LzwCompression(int Quality)
|
|
{
|
|
this.parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)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.CompressionLZW);
|
|
}
|
|
|
|
public byte[] Compress(Bitmap bmp, byte[] AdditionInfo = null)
|
|
{
|
|
using (MemoryStream stream = new MemoryStream())
|
|
{
|
|
if (AdditionInfo != null)
|
|
stream.Write(AdditionInfo, 0, AdditionInfo.Length);
|
|
bmp.Save(stream, encoderInfo, encoderParams);
|
|
return stream.ToArray();
|
|
}
|
|
}
|
|
public void Compress(Bitmap bmp, Stream stream, byte[] AdditionInfo = null)
|
|
{
|
|
if (AdditionInfo != null)
|
|
stream.Write(AdditionInfo, 0, AdditionInfo.Length);
|
|
bmp.Save(stream, encoderInfo, encoderParams);
|
|
}
|
|
|
|
private ImageCodecInfo GetEncoderInfo(string mimeType)
|
|
{
|
|
ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders();
|
|
for (int i = 0; i < imageEncoders.Length; i++)
|
|
{
|
|
if (imageEncoders[i].MimeType == mimeType)
|
|
{
|
|
return imageEncoders[i];
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
} |