c# - 如何创建反向png图像?

标签 c# .net wpf onpaint

我正在创建在我的底座上绘制的 png 图像,我可以从底座保存一个 png 图像,供您引用

Graphics g = e.Graphics;
 ....
g.DrawLine(pen, new Point(x, y), new Point(x1, y1));
 .....
base.OnPaint(e);

using (var bmp = new Bitmap(500, 50))
{
    base.DrawToBitmap(bmp, new Rectangle(0, 0, 500, 50));
    bmp.Save(outPath);
}

这是单色透明图像,现在我如何将这个图像反转为 png 填充任何颜色并且真实图像部分应该是透明的,有没有可能?

细节:所以透明会变成不透明,有填充的地方会变成透明

最佳答案

如果您愿意使用 unsafe,还有一种更快的方法代码:

private unsafe void Invert(Bitmap bmp)
{
    int w = bmp.Width, h = bmp.Height;
    BitmapData data = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

    int* bytes = (int*)data.Scan0;
    for ( int i = w*h-1; i >= 0; i-- )
        bytes[i] = ~bytes[i];
    bmp.UnlockBits(data);
}

请注意,这并不关心颜色,也会反转这些颜色。如果您希望使用特定颜色,则必须稍微修改代码。

关于c# - 如何创建反向png图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11428724/

相关文章:

c# - 如何从URL获取文件名而不下载文件c#

c# - 将多个表从 SQL Server 导出到 XML 以进行还原

c# - 如何用前缀替换 xmlns 命名空间属性?

C# Winforms 数据绑定(bind)

c# - WPF-在循环更新UI时播放声音

c# - 如何同步ListBox的SelectedItem?

c# - 从 DataView C# 中获取值(value)

c# - 如何调试 WCF 程序

c# - 找不到类型或命名空间 'DocumentFormat' - 仅在生成时 - 但智能感知显示类型可用

jquery - 由于 jquery,Listview ItemCommand 没有触发