이미지를 바이트로 전환하여 압축하는 방법입니다.
EncoderParameter클래스를 사용하여 압축의 퀄리티를 지정 할 수 있습니다.
0L과 가까울수록 이미지가 더 압축되어 깨짐현상이 있을 수 있습니다.
아래는 이미지를 선택하여 압축을 한 복사본을 만드는 예제 코드입니다.
public FrmImagecs()
{
InitializeComponent();
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
dlg.Filter = "jpg files (*.jpg)|*.jpg|jpeg files (*.jpeg)|*.jpeg|bmp files (*.bmp)|*.bmp|gif files (*.gif)|*.gif|png files (*.png)|*.png|All files (*.*)|*.*";
Bitmap bmp = new Bitmap(dlg.FileName);
ImageConverter imgConverter = new ImageConverter();
byte[] imgByte = (byte[])imgConverter.ConvertTo(bmp, typeof(byte[]));
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 25L);
myEncoderParameters.Param[0] = myEncoderParameter;
string path = @"c:\catCopy.jpg";
bmp.Save(path, jpgEncoder, myEncoderParameters);
}
}
private ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
테스트결과
cat.jpg를 압축한 catcopy의 사이즈를 보면 대략 4분의 1 수준으로 사이즈가 작아졌습니다.
'c#' 카테고리의 다른 글
c# WPF Behavior Grid click event mvvm패턴으로 만드는 법 (0) | 2023.03.09 |
---|---|
C# wpf Dispatcher DispatcherObjcet사용법 및 정의 (0) | 2023.03.08 |
c# 보조 키 이벤트 , 컨트롤 키 추가 이벤트 넣는 법 (0) | 2023.02.20 |
wpf MVVM Commandparameter 여러 개 파라미터 받기 (0) | 2023.01.30 |
wpf MVVM ICommand 버튼 비활성화 활성화 (0) | 2023.01.26 |