Vorgehensweise: Ermitteln der von einem Encoder unterstützten Parameter
Sie können Bildparameter wie Qualität und Komprimierungsgrad anpassen, aber Sie müssen wissen, welche Parameter von einem bestimmten Bildencoder unterstützt werden. Die Image-Klasse stellt die Methode GetEncoderParameterList bereit, mit der Sie bestimmen können, welche Bildparameter für einen bestimmten Encoder unterstützt werden. Sie geben den Encoder mit einer GUID an. Die Methode GetEncoderParameterList gibt ein Array von EncoderParameter-Objekten zurück.
Beispiel
Im folgenden Beispielcode werden die unterstützten Parameter für den JPEG-Encoder ausgegeben. Verwenden Sie die Liste der Parameterkategorien und der zugeordneten GUIDs in der Encoder-Klassenübersicht, um die Kategorie für jeden Parameter zu bestimmen.
private void GetSupportedParameters(PaintEventArgs e)
{
Bitmap bitmap1 = new Bitmap(1, 1);
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
EncoderParameters paramList = bitmap1.GetEncoderParameterList(jpgEncoder.Clsid);
EncoderParameter[] encParams = paramList.Param;
StringBuilder paramInfo = new StringBuilder();
for (int i = 0; i < encParams.Length; i++)
{
paramInfo.Append("Param " + i + " holds " + encParams[i].NumberOfValues +
" items of type " +
encParams[i].ValueType + "\r\n" + "Guid category: " + encParams[i].Encoder.Guid + "\r\n");
}
e.Graphics.DrawString(paramInfo.ToString(), this.Font, Brushes.Red, 10.0F, 10.0F);
}
private ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
Private Sub GetSupportedParameters(ByVal e As PaintEventArgs)
Dim bitmap1 As New Bitmap(1, 1)
Dim jpgEncoder As ImageCodecInfo = GetEncoder(ImageFormat.Jpeg)
Dim paramList As EncoderParameters = _
bitmap1.GetEncoderParameterList(jpgEncoder.Clsid)
Dim encParams As EncoderParameter() = paramList.Param
Dim paramInfo As New StringBuilder()
Dim i As Integer
For i = 0 To encParams.Length - 1
paramInfo.Append("Param " & i & " holds " & _
encParams(i).NumberOfValues & " items of type " & _
encParams(i).Type.ToString() & vbCr & vbLf & "Guid category: " & _
encParams(i).Encoder.Guid.ToString() & vbCr & vbLf)
Next i
e.Graphics.DrawString(paramInfo.ToString(), _
Me.Font, Brushes.Red, 10.0F, 10.0F)
End Sub
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
Kompilieren des Codes
Für dieses Beispiel benötigen Sie Folgendes:
Eine Windows Forms-Anwendung
Eine PaintEventArgs-Klasse, die einen Parameter von PaintEventHandler darstellt.
Weitere Informationen
.NET Desktop feedback