>백엔드 개발 >C++ >C#에서 이미지를 16비트 회색조로 효율적으로 변환하는 방법은 무엇입니까?

C#에서 이미지를 16비트 회색조로 효율적으로 변환하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-17 13:01:10397검색

How to Efficiently Convert Images to 16-bit Grayscale in C#?

C#에서 16비트 회색조 이미지 만들기

RGB 구성 요소를 하나씩 조정하지 않고 이미지를 16비트 회색조 형식으로 변환하면 System.Drawing.Imaging.PixelFormat 열거형을 직접 사용할 수 있습니다.

회색조 비트맵 만들기

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

이렇게 하면 빈 16비트 회색조 비트맵이 생성됩니다.

기존 이미지 변환

기존 컬러 이미지를 회색조로 변환하려면 해당 픽셀을 반복하고 각 픽셀의 색상을 회색조로 설정하여 원래 색상에서 밝기 정보를 추출할 수 있습니다. (픽셀 순회 및 그레이스케일 변환에 대한 코드 예제는 원본 기사에 전체 코드가 제공되지 않고 비트맵을 생성하는 코드만 제공되므로 여기에서는 생략됩니다.)

최적화 계획

회색조 변환 속도를 높이려면 ColorMatrix 클래스를 사용하여 원본 이미지를 그리기 전에 회색조 변환을 적용할 수 있습니다.

<code class="language-csharp">public static Bitmap MakeGrayscale3(Bitmap original)
{
    Bitmap newBitmap = new Bitmap(original.Width, original.Height);
    using (Graphics g = Graphics.FromImage(newBitmap))
    {
        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을 활용하여 이미지를 그레이스케일로 효율적으로 변환합니다.

위 내용은 C#에서 이미지를 16비트 회색조로 효율적으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.