첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;

#region 회색조 비트맵 구하기 - GetGrayscaleBitmap(sourceImage)

/// <summary>
/// 회색조 비트맵 구하기
/// </summary>
/// <param name="sourceImage">소스 이미지</param>
/// <returns>회색조 비트맵</returns>
public Bitmap GetGrayscaleBitmap(Image sourceImage)
{
    Bitmap targetBitmap = GetBitmap(sourceImage);

    BitmapData targetBitmapData = targetBitmap.LockBits
    (
        new Rectangle(0, 0, sourceImage.Width, sourceImage.Height),
        ImageLockMode.ReadOnly,
        PixelFormat.Format32bppArgb
    );

    IntPtr sourceHandle = targetBitmapData.Scan0;

    byte[] targetByteArray = new byte[targetBitmapData.Stride * targetBitmap.Height];

    Marshal.Copy(sourceHandle, targetByteArray, 0, targetByteArray.Length);

    float rgb = 0;

    for(int i = 0; i < targetByteArray.Length; i += 4)
    {
        rgb =  targetByteArray[i    ] * 0.11f;
        rgb += targetByteArray[i + 1] * 0.59f;
        rgb += targetByteArray[i + 2] * 0.3f;

        targetByteArray[i    ] = (byte)rgb;
        targetByteArray[i + 1] = targetByteArray[i];
        targetByteArray[i + 2] = targetByteArray[i];

        targetByteArray[i + 3] = 255;
    }

    Marshal.Copy(targetByteArray, 0, sourceHandle, targetByteArray.Length);

    targetBitmap.UnlockBits(targetBitmapData);

    targetBitmapData = null;
    targetByteArray  = null;

    return targetBitmap;
}

#endregion
728x90
반응형
그리드형(광고전용)
Posted by 사용자 icodebroker

댓글을 달아 주세요