c#將圖片所有像素轉為深色調

wufflina 8年前發布 | 755 次閱讀 C# c# 圖片處理
public static Image ConvertToSepia(Image orginalImage)
{
    Bitmap newImage = new Bitmap(orginalImage);
    BitmapData orginalData = (orginalImage as Bitmap).LockBits(new Rectangle(0, 0, orginalImage.Width, orginalImage.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

    BitmapData newData = (newImage as Bitmap).LockBits(new Rectangle(0, 0, orginalImage.Width, orginalImage.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
    int orginalstride = orginalData.Stride;
    System.IntPtr orginalScan0 = orginalData.Scan0;

    int newstride = newData.Stride;
    System.IntPtr newScan0 = newData.Scan0;
    unsafe
    {
        byte* pOrginal = (byte*)(void*)orginalScan0;
        byte* pNew = (byte*)(void*)newScan0;

        int nOffset = orginalstride - orginalImage.Width * 3;

        byte red, green, blue;

        for (int y = 0; y < orginalImage.Height; ++y)
        {
            for (int x = 0; x < orginalImage.Width; ++x)
            {
                blue = pOrginal[0];
                green = pOrginal[1];
                red = pOrginal[2];

                int newRed = red * 393 / 1000 + green * 769 / 1000 + blue * 189 / 1000;
                int newGreen = red * 349 / 1000 + green * 686 / 1000 + blue * 168 / 1000;
                int newBlue = red * 272 / 1000 + green * 534 / 1000 + blue * 131 / 1000;
                newRed = Math.Min(newRed, 255);
                newGreen = Math.Min(newGreen, 255);
                newBlue = Math.Min(newBlue, 255);

                pNew[0] = Convert.ToByte(newBlue);
                pNew[1] = Convert.ToByte(newGreen);
                pNew[2] = Convert.ToByte(newRed);

                pOrginal += 3;
                pNew += 3;
            }
            pOrginal += nOffset;
            pNew += nOffset;
        }
    }
    (orginalImage as Bitmap).UnlockBits(orginalData);
    (newImage as Bitmap).UnlockBits(newData);
    return newImage;
}
 本文由用戶 wufflina 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!