> 백엔드 개발 > C++ > 픽셀당 16비트 형식을 사용하여 이미지를 회색조로 변환하려면 어떻게 해야 합니까?

픽셀당 16비트 형식을 사용하여 이미지를 회색조로 변환하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2025-01-17 13:06:10
원래의
639명이 탐색했습니다.

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

16비트 픽셀 이미지의 회색조 변환 방법

이미지 처리에서 그레이스케일 변환은 일반적으로 각 픽셀의 빨간색, 녹색, 파란색(RGB) 구성 요소를 밝기 값으로 설정합니다. 그러나 픽셀당 16비트 형식을 사용하여 이미지를 회색조로 변환하는 방법이 있습니다.

PixelFormat 생성자 사용

이 방법을 사용하여 이미지를 회색조로 변환하려면 Bitmap 클래스의 PixelFormat 생성자를 사용할 수 있습니다. 예시는 다음과 같습니다.

<code class="language-c#">Bitmap grayScaleBP = new System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);</code>
로그인 후 복사

이렇게 하면 크기가 2x2픽셀이고 픽셀 형식이 픽셀당 16비트 회색조인 새 비트맵이 생성됩니다.

기존 이미지를 회색조로 변환

기존 이미지를 회색조로 변환하려면 루프를 사용하여 픽셀을 반복하고 회색조 색상으로 설정할 수 있습니다. 예시는 다음과 같습니다.

<code class="language-c#">// 代码片段略,此处需要补充完整代码以实现灰度转换</code>
로그인 후 복사

이 코드는 비트맵 c의 각 픽셀을 통과하여 빨간색 구성 요소를 밝기 값으로 설정하고 녹색 및 파란색 구성 요소를 0으로 설정하여 효과적으로 회색조로 변환합니다. 결과 비트맵 d에는 원본 이미지의 회색조 버전이 포함됩니다.

ColorMatrix를 사용하는 빠른 방법

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>
로그인 후 복사

이 방법은 ColorMatrix를 사용하여 회색조 변환을 수행하는데, 이는 픽셀을 수동으로 반복하는 것보다 훨씬 빠릅니다.

위 내용은 픽셀당 16비트 형식을 사용하여 이미지를 회색조로 변환하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿