如何覆盖两个图片框c#但可以看到背景中的图片框

时间:2016-07-08 01:32:36

标签: c#

美好的一天

我不知道我的头衔是否正确。抱歉我的英文不好

如何使用c#inoder覆盖两个图片框以获得下面的图像,并在运行时更改上图框的不透明度。

我需要实现的是这样的。我有两个图像,我需要覆盖它们

第一张图片: enter image description here

我有第二张图片,文字为:图片上的另一张文字。 并且文本的位置低于第一图像的文本位置 (我无法上传两张以上的图片,因为我还没有10张图片。)

我需要在下面的图片上做,但使用两个图片框,可以更改不透明度,以便第一个下面的第二个图片框可以看到

和两个图像的输出: enter image description here

我用java创建了输出图像。我知道我可以使用c#运行jar文件。但是用户需要在运行时更改不透明度。那我怎么能这样做呢?

这是我使用的java代码

BufferedImage biInner = ImageIO.read(inner);         BufferedImage biOutter = ImageIO.read(outter);

    System.out.println(biInner);
    System.out.println(biOutter);

    Graphics2D g = biOutter.createGraphics();
    g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
    int x = (biOutter.getWidth() - biInner.getWidth()) / 2;
    int y = (biOutter.getHeight() - biInner.getHeight()) / 2;
    System.out.println(x + "x" + y);
    g.drawImage(biInner, x, y, null);
    g.dispose();

    ImageIO.write(biOutter, "PNG", new File(output));

我希望我的问题是可以理解的。谢谢

1 个答案:

答案 0 :(得分:0)

在这里,只是一个示例,但blueBox是透明的(0.5):

  public sealed partial class Form1 : Form
  {
    private readonly Bitmap m_BlueBox;
    private readonly Bitmap m_YellowBox;

    public Form1()
    {
      InitializeComponent();
      DoubleBuffered = true;
      m_YellowBox = CreateBox(Color.Yellow);
      m_BlueBox = CreateBox(Color.Blue);
      m_BlueBox = ChangeOpacity(m_BlueBox, 0.5f);
    }

    public static Bitmap ChangeOpacity(Image img, float opacityvalue)
    {
      var bmp = new Bitmap(img.Width, img.Height);
      using (var graphics = Graphics.FromImage(bmp))
      {
        var colormatrix = new ColorMatrix();
        colormatrix.Matrix33 = opacityvalue;
        var imgAttribute = new ImageAttributes();
        imgAttribute.SetColorMatrix(colormatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
        graphics.DrawImage(img, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, img.Width, img.Height,
          GraphicsUnit.Pixel, imgAttribute);
      }
      return bmp;
    }

    private static Bitmap CreateBox(Color color)
    {
      var bmp = new Bitmap(200, 200);
      for (var x = 0; x < bmp.Width; x++)
      {
        for (var y = 0; y < bmp.Height; y++)
        {
          bmp.SetPixel(x, y, color);
        }
      }
      return bmp;
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
      e.Graphics.DrawImage(m_YellowBox, new Point(10, 10));
      e.Graphics.DrawImage(m_BlueBox, new Point(70, 70));
    }
  }