| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
wufflina
10年前发布

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;  }