WinForms位图具有完整的Alpha通道支持

时间:2019-04-25 20:49:03

标签: c# winforms bitmap alpha-transparency

当我在位图图形上绘制具有半透明像素的图像时, 然后在屏幕上绘制位图,这些像素就会变黑。

同时,图像周围的纯透明像素保持透明。

谁知道该如何解决?

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
using System.Drawing.Drawing2D;

namespace SimpleTest
{
  public partial class Form12_BitmapAlpha : Form
  {
    public Form12_BitmapAlpha()
    {
      InitializeComponent();
    }

    private void Panel1_Paint(object sender, PaintEventArgs e)
    {
      //Back
      e.Graphics.FillRectangle(new SolidBrush(Color.Coral), new Rectangle(5, 5, 25, 85));

      // 1
      RadioButtonRenderer.DrawRadioButton(e.Graphics, new Point(10, 10), RadioButtonState.CheckedNormal);

      //2
      Size cbSize = RadioButtonRenderer.GetGlyphSize(e.Graphics, RadioButtonState.CheckedNormal);
      Bitmap cbBitmap = new Bitmap(cbSize.Width, cbSize.Height);

      using (Graphics offscreen = Graphics.FromImage(cbBitmap))
      {
        //offscreen.CompositingMode = CompositingMode.SourceCopy; //doesn't work
        //offscreen.Clear(Color.Transparent); //it doesn't help
        RadioButtonRenderer.DrawRadioButton(offscreen, new Point(0, 0), RadioButtonState.CheckedNormal);
      }

      e.Graphics.DrawImage(cbBitmap, new Point(10, 40));

      //3
      RadioButtonRenderer.DrawRadioButton(e.Graphics, new Point(10, 70), RadioButtonState.CheckedNormal);
      Bitmap cbBitmap1 = new Bitmap(20, 20);

      using (Graphics offscreen = Graphics.FromImage(cbBitmap1))
      {
        offscreen.FillRectangle(new SolidBrush(Color.FromArgb(128, Color.Red)), new Rectangle(2, 2, 16, 16));
      }

      e.Graphics.DrawImage(cbBitmap1, new Point(0, 65));
    }
  }
}

在代码的第一部分(在// 1下),我直接在面板的图形上绘制,您会看到RadioButton的边缘以半透明颜色绘制。

在代码的第二部分(在// 2下),我通过Bitmap对象绘制了相同的内容。这里的边框是黑色的。

在第三部分(在// 3下),我在位图上绘制了一个半透明的正方形,然后在屏幕上绘制了该位图,以表明该位图支持半透明区域。

和结果

enter image description here

0 个答案:

没有答案