How to load Transparent PNG to Bitmap and ignore alpha channel

孤人 提交于 2019-12-02 11:26:08

Try this extension method:

    public static void SetAlpha(this Bitmap bmp, byte alpha)
    {
        if(bmp == null) throw new ArgumentNullException("bmp");

        var data = bmp.LockBits(
            new Rectangle(0, 0, bmp.Width, bmp.Height),
            System.Drawing.Imaging.ImageLockMode.ReadWrite,
            System.Drawing.Imaging.PixelFormat.Format32bppArgb);

        var line = data.Scan0;
        var eof = line + data.Height * data.Stride;
        while(line != eof)
        {
            var pixelAlpha = line + 3;
            var eol = pixelAlpha + data.Width * 4;
            while(pixelAlpha != eol)
            {
                System.Runtime.InteropServices.Marshal.WriteByte(
                    pixelAlpha, alpha);
                pixelAlpha += 4;
            }
            line += data.Stride;
        }
        bmp.UnlockBits(data);
    }

Usage:

var pngImage = new Bitmap("filename.png");
pngImage.SetAlpha(255);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!