从另一个图像Gdiplus掩模图像(Gdiplus mask image from another

2019-10-16 14:30发布

有没有一种方法来操作使用阿尔法从另一个图像的图像的阿尔法?

假设我有一个形象,我想改变其阿尔法开始在左侧不透明,右侧完全透明的,目前我再画一个图像与一个LinearGradientBrush和由像素循环像素设置为从第二图像原单图像的阿尔法,有没有Gdiplus另一种方式一些图像掩模,或混合两种图像的阿尔法?

结论:似乎有在GDI +没办法混合两个图像,唯一的办法似乎是通过迭代通像素的手工方式。

Answer 1:

我认为你是,你必须这样做逐像素正确。 我也寻找一个更“纯粹”的方式做到这一点,但是这是我结束了:

    public enum ChannelARGB
    {
        Blue = 0,
        Green = 1,
        Red = 2,
        Alpha = 3
    }

    public static void transferOneARGBChannelFromOneBitmapToAnother(
        Bitmap source,
        Bitmap dest,
        ChannelARGB sourceChannel,
        ChannelARGB destChannel )
    {
        if ( source.Size!=dest.Size )
            throw new ArgumentException();
        Rectangle r = new Rectangle( Point.Empty, source.Size );
        BitmapData bdSrc = source.LockBits( r, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb );
        BitmapData bdDst = dest.LockBits( r, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb );
        unsafe
        {
            byte* bpSrc = (byte*)bdSrc.Scan0.ToPointer();
            byte* bpDst = (byte*)bdDst.Scan0.ToPointer();
            bpSrc += (int)sourceChannel;
            bpDst += (int)destChannel;
            for ( int i = r.Height * r.Width; i > 0; i-- )
            {
                *bpDst = *bpSrc;
                bpSrc += 4;
                bpDst += 4;
            }
        }
        source.UnlockBits( bdSrc );
        dest.UnlockBits( bdDst );
    }


文章来源: Gdiplus mask image from another image