Когда я рисую на растровой графике изображение с полупрозрачными пикселями, а затем рисую растровое изображение на экране, эти пиксели становятся черными.
В то же время чисто прозрачные пиксели вокруг изображения остаются прозрачными.
Кто знает, как это исправить?
Вот код:
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) я рисую то же самое, но через растровый объект.Здесь граница нарисована черным.
И в третьей части (под // 3) я рисую полупрозрачный квадрат на растровом изображении, а затем рисую это растровое изображение на экране, чтобы показать, что растровое изображение поддерживает полупрозрачные области.
и результат
