当我在位图图形上绘制具有半透明像素的图像时, 然后在屏幕上绘制位图,这些像素就会变黑。
同时,图像周围的纯透明像素保持透明。
谁知道该如何解决?
代码如下:
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下),我在位图上绘制了一个半透明的正方形,然后在屏幕上绘制了该位图,以表明该位图支持半透明区域。
和结果