📄 grayscale.cs
字号:
namespace Imps.Utils
{
using System;
using System.Drawing;
using System.Drawing.Imaging;
public class Grayscale
{
private float cb;
private float cg;
private float cr;
public Grayscale(float cr, float cg, float cb)
{
this.cr = cr;
this.cg = cg;
this.cb = cb;
}
public unsafe Bitmap Apply(Bitmap srcImg)
{
int width = srcImg.Width;
int height = srcImg.Height;
BitmapData bitmapdata = srcImg.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
Bitmap bitmap = CreateGrayscaleImage(width, height);
BitmapData data2 = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format8bppIndexed);
int num3 = bitmapdata.Stride - (width * 3);
int num4 = data2.Stride - width;
byte* numPtr = (byte*) bitmapdata.Scan0.ToPointer();
byte* numPtr2 = (byte*) data2.Scan0.ToPointer();
for (int i = 0; i < height; i++)
{
int num6 = 0;
while (num6 < width)
{
numPtr2[0] = (byte) (((this.cr * numPtr[2]) + (this.cg * numPtr[1])) + (this.cb * numPtr[0]));
num6++;
numPtr += 3;
numPtr2++;
}
numPtr += num3;
numPtr2 += num4;
}
bitmap.UnlockBits(data2);
srcImg.UnlockBits(bitmapdata);
return bitmap;
}
public static Bitmap CreateGrayscaleImage(int width, int height)
{
Bitmap srcImg = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
SetGrayscalePalette(srcImg);
return srcImg;
}
public static void SetGrayscalePalette(Bitmap srcImg)
{
if (srcImg.PixelFormat != PixelFormat.Format8bppIndexed)
{
throw new ArgumentException();
}
ColorPalette palette = srcImg.Palette;
for (int i = 0; i < 0x100; i++)
{
palette.Entries[i] = Color.FromArgb(i, i, i);
}
srcImg.Palette = palette;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -