Maison > développement back-end > C++ > Comment convertir une image en niveaux de gris 16 bits ?

Comment convertir une image en niveaux de gris 16 bits ?

Barbara Streisand
Libérer: 2025-01-17 12:52:10
original
306 Les gens l'ont consulté

How to Convert an Image to 16-Bit Grayscale?

Techniques de conversion d'images en niveaux de gris 16 bits

Ce guide explique comment convertir des images au format niveaux de gris 16 bits sans ajuster manuellement les composants RVB aux valeurs de luminance.

Création d'un nouveau bitmap en niveaux de gris 16 bits :

La méthode la plus simple consiste à utiliser le constructeur System.Drawing.Bitmap avec le paramètre System.Drawing.Imaging.PixelFormat. Cela crée directement un nouveau bitmap avec le format de niveaux de gris 16 bits souhaité :

<code class="language-csharp">Bitmap grayScaleBP = new System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);</code>
Copier après la connexion

Cet extrait de code génère un bitmap de 2x2 pixels en niveaux de gris de 16 bits. Ajustez les dimensions selon vos besoins pour votre image.

Conversion d'une image existante en niveaux de gris 16 bits :

Pour convertir un bitmap existant, vous devrez parcourir chaque pixel et redéfinir ses propriétés de couleur. Bien que possible, cette méthode est moins efficace pour les images plus grandes.

<code class="language-csharp">// (Pixel iteration code would go here – omitted for brevity due to inefficiency)</code>
Copier après la connexion

Conversion optimisée des niveaux de gris à l'aide de ColorMatrix :

Pour une conversion en niveaux de gris beaucoup plus rapide et plus efficace, utilisez un ColorMatrix. Cette approche applique une matrice de transformation aux données de couleur de l'image, entraînant une conversion en niveaux de gris.

<code class="language-csharp">ColorMatrix colorMatrix = new ColorMatrix(
    new float[][] 
    {
        new float[] {.3f, .3f, .3f, 0, 0},
        new float[] {.59f, .59f, .59f, 0, 0},
        new float[] {.11f, .11f, .11f, 0, 0},
        new float[] {0, 0, 0, 1, 0},
        new float[] {0, 0, 0, 0, 1}
    });

using (ImageAttributes attributes = new ImageAttributes()) {
    attributes.SetColorMatrix(colorMatrix);
    // ... (Drawing code using attributes to apply the ColorMatrix) ...
}</code>
Copier après la connexion

Cela utilise une pondération de luminance standard (.3, .59, .11) pour une conversion d'échelle de gris perceptuellement précise. Pensez à remplacer la section commentée par le code approprié pour dessiner l'image en utilisant le ImageAttributes modifié. Cette méthode est bien plus efficace que la manipulation pixel par pixel, en particulier pour les images plus grandes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal