Nasıl yapılır: JPEG Sıkıştırma Düzeyini Ayarlama
Dosya boyutunu en aza indirmek veya kalitesini artırmak için görüntüyü diske kaydederek görüntünün parametrelerini değiştirmek istiyor olabilirsiniz. Sıkıştırma düzeyini değiştirerek JPEG görüntüsünün kalitesini ayarlayabilirsiniz. JPEG görüntüsünü kaydederek sıkıştırma düzeyini belirtmek için bir nesnesi oluşturmanız ve bunu EncoderParameters sınıfının Save yöntemine geçmeniz Image gerekir. Nesnesini, EncoderParameters bir içeren bir diziye sahip olacak şekilde EncoderParameter başlatabilirsiniz. 100'ler EncoderParameter için Quality kodlayıcıyı ve istenen sıkıştırma düzeyini belirtin.
Örnek
Aşağıdaki örnek kod bir nesnesi EncoderParameter oluşturur ve üç JPEG görüntü kaydeder. Her JPEG görüntüsü, oluşturucuya geçirilen değer değiştirerek long farklı bir kalite düzeyiyle EncoderParameter kaydedilir. Kalite düzeyi 0 en yüksek sıkıştırmaya, kalite düzeyi ise 100 olan en düşük sıkıştırma düzeyine karşılık gelen düzeydir.
private void VaryQualityLevel()
{
// Get a bitmap. The using statement ensures objects
// are automatically disposed from memory after use.
using (Bitmap bmp1 = new Bitmap(@"C:\TestPhoto.jpg"))
{
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
// Create an Encoder object based on the GUID
// for the Quality parameter category.
System.Drawing.Imaging.Encoder myEncoder =
System.Drawing.Imaging.Encoder.Quality;
// Create an EncoderParameters object.
// An EncoderParameters object has an array of EncoderParameter
// objects. In this case, there is only one
// EncoderParameter object in the array.
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);
myEncoderParameters.Param[0] = myEncoderParameter;
bmp1.Save(@"c:\TestPhotoQualityFifty.jpg", jpgEncoder, myEncoderParameters);
myEncoderParameter = new EncoderParameter(myEncoder, 100L);
myEncoderParameters.Param[0] = myEncoderParameter;
bmp1.Save(@"C:\TestPhotoQualityHundred.jpg", jpgEncoder, myEncoderParameters);
// Save the bitmap as a JPG file with zero quality level compression.
myEncoderParameter = new EncoderParameter(myEncoder, 0L);
myEncoderParameters.Param[0] = myEncoderParameter;
bmp1.Save(@"C:\TestPhotoQualityZero.jpg", jpgEncoder, myEncoderParameters);
}
}
Private Sub VaryQualityLevel()
' Get a bitmap. The Using statement ensures objects
' are automatically disposed from memory after use.
Using bmp1 As New Bitmap("C:\TestPhoto.jpg")
Dim jpgEncoder As ImageCodecInfo = GetEncoder(ImageFormat.Jpeg)
' Create an Encoder object based on the GUID
' for the Quality parameter category.
Dim myEncoder As System.Drawing.Imaging.Encoder = System.Drawing.Imaging.Encoder.Quality
' Create an EncoderParameters object.
' An EncoderParameters object has an array of EncoderParameter
' objects. In this case, there is only one
' EncoderParameter object in the array.
Dim myEncoderParameters As New EncoderParameters(1)
Dim myEncoderParameter As New EncoderParameter(myEncoder, 50L)
myEncoderParameters.Param(0) = myEncoderParameter
bmp1.Save("c:\TestPhotoQualityFifty.jpg", jpgEncoder, myEncoderParameters)
myEncoderParameter = New EncoderParameter(myEncoder, 100L)
myEncoderParameters.Param(0) = myEncoderParameter
bmp1.Save("C:\TestPhotoQualityHundred.jpg", jpgEncoder, myEncoderParameters)
' Save the bitmap as a JPG file with zero quality level compression.
myEncoderParameter = New EncoderParameter(myEncoder, 0L)
myEncoderParameters.Param(0) = myEncoderParameter
bmp1.Save("C:\TestPhotoQualityZero.jpg", jpgEncoder, myEncoderParameters)
End Using
End Sub
private ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
Private Function GetEncoder(ByVal format As ImageFormat) As ImageCodecInfo
Dim codecs As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders()
Dim codec As ImageCodecInfo
For Each codec In codecs
If codec.FormatID = format.Guid Then
Return codec
End If
Next codec
Return Nothing
End Function
Kod Derleniyor
Bu örnek şunları gerektirir:
Bir Windows Forms uygulaması.
parametresi PaintEventArgs olan PaintEventHandler bir .
adlı ve
TestPhoto.jpgTestPhoto.jpgkonumunda bulunan bir görüntü dosyası.