使用C#合并2个图像

chr*_*702 2 c# watermark image-processing

我想在我的C#程序中合并两张图片.第一个是灰度模式下的任何图片,第二个是这张图片中的图片:第二张图片

两张图片/图片都有相同的大小,这是我的代码:

Bitmap first = new Bitmap (picturebox1.image);
Bitmap second = new Bitmap (picturebox2.image);
Bitmap result = new Bitmap (first.width, first.height);
Graphics g = Graphics.FromImage(result);
g.DrawImageUnscaled(first, 0, 0);
g.Flush();
g.DrawImageUnscaled(second, 0, 0);
g.Flush();
picturebox3.image = result;
Run Code Online (Sandbox Code Playgroud)

我可以加入这些图片,但结果的尺寸小于两张原件(两张图片尺寸相同).有人能给我一些建议吗?

另外,我想结果图片有这样的条件: 如果第二张图片中的边缘像素落到第一张照片的亮边,它会变暗,否则当边缘掉到黑暗面时,它会很亮(看起来很棒)辉光).所以文字将是半透明的.

这是我想要的结果的一个例子.

结果

请问有人可以提出一些建议吗?

qwr*_*qwr 5

这是为了加入

Bitmap first = new Bitmap (picturebox1.Image);
    Bitmap second = new Bitmap (picturebox2.Image);
    Bitmap result = new Bitmap (first.Width+first.Width, first.Height);
    Graphics g = Graphics.FromImage(result);
    g.DrawImageUnscaled(first, 0, 0);
    g.DrawImageUnscaled(second,first.Width, 0);
Run Code Online (Sandbox Code Playgroud)

尝试将其合并为另一个.自己设置alpha(红色:如果你不想要alpha,你可以使用BitMap.MakeTransParent)

        public Bitmap SetImageOpacity(Image image, float opacity)
        {
            try
            {
                //create a Bitmap the size of the image provided  
                Bitmap bmp = new Bitmap(image.Width, image.Height);

                //create a graphics object from the image  
                using (Graphics gfx = Graphics.FromImage(bmp))
                {

                    //create a color matrix object  
                    ColorMatrix matrix = new ColorMatrix();

                    //set the opacity  
                    matrix.Matrix33 = opacity;

                    //create image attributes  
                    ImageAttributes attributes = new ImageAttributes();

                    //set the color(opacity) of the image  
                    attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

                    //now draw the image  
                    gfx.DrawImage(image, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes);
                }
                return bmp;
            }
            catch (Exception ex)
            {

                return null;
            }
        } 
        private void button1_Click(object sender, EventArgs e)
        {
            Bitmap first = new Bitmap(pictureBox1.Image); 
            Bitmap second = SetImageOpacity(pictureBox2.Image, 0.5f);
            //Bitmap result = new Bitmap(first.Width, first.Height);
            //fix :
            Bitmap result = new Bitmap(Math.Max(first.Width,second.Width), Math.Max(first.Height,second.Height));
            Console.WriteLine(first.Width);
            Graphics g = Graphics.FromImage(result);
            g.DrawImageUnscaled(first, 0, 0);
            g.DrawImageUnscaled(second, 0, 0);
            pictureBox3.Image = result;
            result.Save("result.jpg" );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并且为了水印你为什么不想在这里使用带有alpha的Drawstring是所有这些的文章http://www.codeproject.com/Articles/5034/How-to-implement-Alpha-blending