Bitmap bmp1 = new Bitmap(@"c:\coneimages\Cone_Images1.gif");
Bitmap bmp2 = new Bitmap(@"c:\coneimages\PictureBox_Images1.gif");
Bitmap bmp3 = new Bitmap(MergeTwoImages(bmp1,bmp2));
bmp3.Save(@"c:\coneimages\merged.bmp");




public static Bitmap MergeTwoImages(Image firstImage, Image secondImage)
        {
            if (firstImage == null)
            {
                throw new ArgumentNullException("firstImage");
            }

            if (secondImage == null)
            {
                throw new ArgumentNullException("secondImage");
            }

            int outputImageWidth = firstImage.Width > secondImage.Width ? firstImage.Width : secondImage.Width;

            int outputImageHeight = firstImage.Height + secondImage.Height + 1;

            Bitmap outputImage = new Bitmap(outputImageWidth, outputImageHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            using (Graphics graphics = Graphics.FromImage(outputImage))
            {
                graphics.DrawImage(firstImage, new Rectangle(new Point(), firstImage.Size),
                    new Rectangle(new Point(), firstImage.Size), GraphicsUnit.Pixel);
                graphics.DrawImage(secondImage, new Rectangle(new Point(0, firstImage.Height + 1), secondImage.Size),
                    new Rectangle(new Point(), secondImage.Size), GraphicsUnit.Pixel);
            }

            return outputImage;
        }


但这不是我想要的,我不确定如何以及在Google中寻找什么。
我想要的是bmp1会超过bmp2一样的图层。 bmp1是透明的,我希望它像bmp2上的图层。

因此,在bmp3中,我将看到带有bmp1的整个常规bmp2。

最佳答案

假定bmp1中包含alpha,则首先绘制bmp2,然后将合成模式设置为SourceOver(默认),然后绘制bmp1。这应该完成正确的alpha混合顺序。

换一种说法...

Bitmap bmp3 = new Bitmap(MergeTwoImages(bmp2,bmp1)); // Swapped arguments.


如果bmp1不包含alpha,则将需要使用颜色矩阵来更改透明度。

关于c# - 如何将两个图像合并为一个图像,而将两个图像合并为一个透明于第二个图像呢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28422535/

10-11 11:58