在C#中将JPG与GDI合并

时间:2009-07-01 21:00:12

标签: c# transparency gdi jpeg

我的情景:

  • 我有一个彩色背景图片JPG。
  • 我在JPG白色背景上有一个黑色文字。
  • 两张图片的大小(高度和宽度)相同

我想在彩色背景图像上叠加带有黑色文字和白色背景的图像,即白色背景变得透明,以便看到它下方的彩色背景。

如何在C#中使用GDI执行此操作?

谢谢!

4 个答案:

答案 0 :(得分:2)

感谢GalacticCowboy我能够提出这个解决方案:

using (Bitmap background = (Bitmap)Bitmap.FromFile(backgroundPath))
{
     using (Bitmap foreground = (Bitmap)Bitmap.FromFile(foregroundPath))
     {
          // check if heights and widths are the same
          if (background.Height == foreground.Height & background.Width == foreground.Width)
          {
               using (Bitmap mergedImage = new Bitmap(background.Width, background.Height))
               {
                    for (int x = 0; x < mergedImage.Width; x++)
                    {
                         for (int y = 0; y < mergedImage.Height; y++)
                         {
                              Color backgroundPixel = background.GetPixel(x, y);
                              Color foregroundPixel = foreground.GetPixel(x, y);
                              Color mergedPixel = Color.FromArgb(backgroundPixel.ToArgb() & foregroundPixel.ToArgb());
                              mergedImage.SetPixel(x, y, mergedPixel);
                          }
                    }
                    mergedImage.Save("filepath");
               }

          }
     }
}

像魅力一样工作。谢谢!

答案 1 :(得分:1)

如果图像大小相同,则迭代它们并“和”每个像素的颜色。对于白色像素,您应该获得另一个图像的颜色,而对于黑色像素,您应该变黑。

如果尺寸不同,请先缩放。

我正在把它放在头顶,但是像:

Color destColor = Color.FromArgb(pixel1.ToArgb() & pixel2.ToArgb());

答案 2 :(得分:1)

存在更简单,更快捷的方式。在绘制必须部分可见的图像时,应使用ImageAttributes。

Image BackImage = Image.FromFile(backgroundPath);
using (Graphics g = Graphics.FromImage(BackImage))
{
    using (ForeImage = Image.FromFile(foregroundPath))
    {   
        ImageAttributes imageAttr = new ImageAttributes();
        imageAttr.SetColorKey(Color.FromArgb(245, 245, 245), Color.FromArgb(255, 255, 255),
            ColorAdjustType.Default);
        g.DrawImage(ForeImage, new Rectangle(0, 0, BackImage.Width, BackImage.Height),
            0, 0, BackImage.Width, BackImage.Height, GraphicsUnit.Pixel, imageAttr);
    }
}

SetColorKey方法将使指定范围内的颜色透明,因此您可以使白色位图像素透明,包括受jpeg压缩伪影影响的所有像素。

答案 3 :(得分:-1)

查看这篇文章。它为您提供了将指定颜色作为图像中透明颜色的代码 http://www.codedblog.com/2007/08/28/generating-a-transparent-gif-image-using-c/