Maison > développement back-end > C++ > Comment puis-je convertir une image en niveaux de gris en utilisant un format 16 bits par pixel ?

Comment puis-je convertir une image en niveaux de gris en utilisant un format 16 bits par pixel ?

Susan Sarandon
Libérer: 2025-01-17 13:06:10
original
639 Les gens l'ont consulté

How Can I Convert an Image to Grayscale Using a 16-Bit per Pixel Format?

Méthode de conversion en niveaux de gris pour les images en pixels 16 bits

Dans le traitement d'image, la conversion des niveaux de gris définit généralement les composantes rouge, verte et bleue (RVB) de chaque pixel sur une valeur de luminosité. Cependant, il existe un moyen de convertir une image en niveaux de gris en utilisant un format 16 bits par pixel.

Utilisez le constructeur PixelFormat

Pour convertir une image en niveaux de gris à l'aide de cette méthode, vous pouvez utiliser le constructeur PixelFormat de la classe Bitmap. Un exemple est le suivant :

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

Cela créera un nouveau bitmap d'une taille de 2x2 pixels et d'un format de pixel de 16 bits par pixel en niveaux de gris.

Convertir l'image existante en niveaux de gris

Pour convertir une image existante en niveaux de gris, vous pouvez utiliser une boucle pour parcourir les pixels et les définir sur une couleur en niveaux de gris. Un exemple est le suivant :

<code class="language-c#">// 代码片段略,此处需要补充完整代码以实现灰度转换</code>
Copier après la connexion

Ce code parcourt chaque pixel du bitmap c et définit la composante rouge sur la valeur de luminosité et les composantes verte et bleue sur zéro, la convertissant ainsi en niveaux de gris. Le bitmap d résultant contient une version en niveaux de gris de l'image originale.

Un moyen rapide d'utiliser ColorMatrix

Convertissez plus rapidement les images en niveaux de gris à l'aide de ColorMatrix :

<code class="language-c#">public static Bitmap MakeGrayscale3(Bitmap original)
{
    // 创建一个与原始图像大小相同的空白位图
    Bitmap newBitmap = new Bitmap(original.Width, original.Height);

    // 从新图像获取图形对象
    using (Graphics g = Graphics.FromImage(newBitmap)) {
        // 创建灰度ColorMatrix
        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);

            // 使用灰度颜色矩阵在新图像上绘制原始图像
            g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height),
                        0, 0, original.Width, original.Height, GraphicsUnit.Pixel, attributes);
        }
    }

    // 返回新的位图
    return newBitmap;
}</code>
Copier après la connexion

Cette méthode utilise un ColorMatrix pour effectuer une conversion en niveaux de gris, ce qui est beaucoup plus rapide qu'une itération manuelle à travers les pixels.

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