对象的扩展方法

Extension method on Objects

我有兴趣在 Bitmap 对象上创建一个扩展方法,这样我就可以像这样简单地调用它:

Bitmap bmp = new Bitmap(...);
bmp.GrayScale();

生成的 bmp 为灰度。

目前我有一个扩展方法 Bitmap GrayScale(this Bitmap bmp) 但要使用它我不得不说 bmp = bmp.GrayScale()

它有效,但我想使用 bmp = bmp. 符号来消除。

谢谢

Disclaimer: I don't regard this as an answer per se but just the fix to the code that gave me grey hairs.

@diiN_ 是对的。我的代码的问题在于,它在内部创建了另一个 Bitmap 对象,该对象基本上是图像处理的基础。然后返回这个对象。灰度未应用于我的原始对象。提供的 link 非常有帮助。

public static void SetGrayPalette(this Bitmap bmpImage)
{
    ColorPalette palette = bmpImage.Palette;
    for (int i = 0; i < palette.Entries.Length; i++)
    {
        palette.Entries[i] = Color.FromArgb(i, i, i);
    }
    bmpImage.Palette = palette;
}

原来代码是这样的:

public static void SetGrayPalette(this Bitmap bmpImage)
{
    ColorPalette palette = bmpImage.Palette;
    Bitmap target = new Bitmap(bmpImage.Width, bmpImage.Height);
    for (int i = 0; i < palette.Entries.Length; i++)
    {
        palette.Entries[i] = Color.FromArgb(i, i, i);
    }
    target.Palette = palette;
    return target;
}