Partager via


Comment : déterminer les paramètres pris en charge par un encodeur

Mise à jour : novembre 2007

Vous pouvez ajuster les paramètres d'image, tels que la qualité et le niveau de compression, mais vous devez savoir quels paramètres sont pris en charge par un encodeur d'image donné. La classe Image fournit la méthode GetEncoderParameterList afin que vous puissiez déterminer quels paramètres d'image sont pris en charge pour un encodeur spécifique. Vous spécifiez l'encodeur avec un GUID. La méthode GetEncoderParameterList retourne un tableau d'objets EncoderParameter.

Exemple

L'exemple de code suivant présente les paramètres pris en charge pour l'encodeur JPEG. Utilisez la liste des catégories de paramètre et les GUID associés dans la vue d'ensemble de la classe Encoder pour déterminer la catégorie de chaque paramètre.

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.GetImageDecoders()

    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
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.GetImageDecoders();

    foreach (ImageCodecInfo codec in codecs)
    {
        if (codec.FormatID == format.Guid)
        {
            return codec;
        }
    }
    return null;
}

Compilation du code

Cet exemple nécessite les éléments suivants :

Voir aussi

Tâches

Comment : répertorier les encodeurs installés

Concepts

Types de bitmaps

Autres ressources

Utilisation d'encodeurs et de décodeurs d'images dans GDI+ managé