我有兴趣在Bitmap
对象上创建一个扩展方法,这样我就可以像这样调用它:
Bitmap bmp = new Bitmap(...);
bmp.GrayScale();
,结果bmp
为灰度。
目前我有一个扩展方法Bitmap GrayScale(this Bitmap bmp)
,但要使用它我必须说bmp = bmp.GrayScale()
它有效,但我想删除使用bmp = bmp.
表示法。
由于
答案 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;
}