对象

时间:2016-11-08 13:48:58

标签: c#-4.0 bitmap extension-methods

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

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

,结果bmp为灰度。

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

它有效,但我想删除使用bmp = bmp.表示法。

由于

1 个答案:

答案 0 :(得分:1)

免责声明:我不认为这是一个答案本身,而只是修复了给我带来白发的代码。

@diiN_是对的。我的代码的问题是在内部,它创建了另一个Bitmap对象,基本上是对图像的操作。然后返回此对象。灰度未应用于我的原始对象。提供的链接非常有用。

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