最近奇葩经理提出了奇葩的需求,要能在网站上改变图片的颜色,比如灰色的变成彩色,彩色的变成灰色,尼玛楼主的感受你们不懂!于是有了下面的代码。。。

用法:调用update_pixelColor方法并传参数即可

  1. #region 改变图片颜色
  2. /// <summary>
  3. /// 改变图片的颜色
  4. /// </summary>
  5. /// <param name="filePath">图片的完整路径</param>
  6. /// <param name="colorIndex">改变的颜色,true为灰色,false为彩色</param>
  7. public void update_pixelColor(string filePath, bool colorIndex)
  8. {
  9. Bitmap bmp = new Bitmap(Bitmap.FromFile(filePath));
  10. int value = 0;
  11. for (int i = 0; i < bmp.Height; i++)
  12. {
  13. for (int j = 0; j < bmp.Width; j++)
  14. {
  15. if (colorIndex)
  16. value = this.GetGrayNumColor(bmp.GetPixel(j, i));
  17. else
  18. value = this.GetHongNumColor(bmp.GetPixel(j, i));
  19. bmp.SetPixel(j, i, Color.FromArgb(value, value, value));
  20. }
  21. }
  22. bmp.Save(filePath);
  23. }
  24. /// <summary>
  25. /// 获取彩色单点像素
  26. /// </summary>
  27. /// <param name="posClr">单点像素</param>
  28. /// <returns>int</returns>
  29. private int GetHongNumColor(Color posClr)
  30. {
  31. return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472) >> 16;
  32. }
  33. /// <summary>
  34. /// 获取灰色单点像素
  35. /// </summary>
  36. /// <param name="posClr">单点像素</param>
  37. /// <returns>Color</returns>
  38. private int GetGrayNumColor(Color posClr)
  39. {
  40. //要改变ARGB
  41. return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472) >> 16;
  42. }
  43. #endregion 改变图片颜色

这个转换的比较慢 看到编程人生上有关于这方面的总结,哪天来研究一下

05-07 15:15