透明的图像与C#WinForms

我正在使用VS 2008中的Windows Forms应用程序,我想在另一个顶部显示一个图像,顶部图像是一个GIF或透明部分。

基本上我有一个大的形象,我想把一个小的形象,如果它,以便他们似乎是一个形象给用户。

我一直在试图使用一个picturebox,但这似乎并没有奏效,有什么build议吗?

几天前我也遇到了类似的情况。 您可以创build一个透明的控件来托pipe您的图像。

using System; using System.Windows.Forms; using System.Drawing; public class TransparentControl : Control { private readonly Timer refresher; private Image _image; public TransparentControl() { SetStyle(ControlStyles.SupportsTransparentBackColor, true); BackColor = Color.Transparent; refresher = new Timer(); refresher.Tick += TimerOnTick; refresher.Interval = 50; refresher.Enabled = true; refresher.Start(); } protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x20; return cp; } } protected override void OnMove(EventArgs e) { RecreateHandle(); } protected override void OnPaint(PaintEventArgs e) { if (_image != null) { e.Graphics.DrawImage(_image, (Width / 2) - (_image.Width / 2), (Height / 2) - (_image.Height / 2)); } } protected override void OnPaintBackground(PaintEventArgs e) { //Do not paint background } //Hack public void Redraw() { RecreateHandle(); } private void TimerOnTick(object source, EventArgs e) { RecreateHandle(); refresher.Stop(); } public Image Image { get { return _image; } set { _image = value; RecreateHandle(); } } } 

PictureBox有2层图像:BackgroundImage和Image,可以独立使用,包括绘图和清除。

将大/底图像放在PictureBox ,然后向OnPaint事件添加一个处理程序,并使用其中一个e.Graphics.DrawImage()重载。 您可以使用Image.FromFile()加载图像。

小/顶部的图像必须有一个alpha通道,并在背景透明的覆盖工作。 你应该能够很容易地在Photoshop或类似的东西确保这一点。 确保以支持Alpha通道的格式(如PNG)保存。

vb.net代码(所有信用Leon Tayson):

 Imports System Imports System.Windows.Forms Imports System.Drawing Public Class TransparentControl Inherits Control Private ReadOnly Local_Timer As Timer Private Local_Image As Image Public Sub New() SetStyle(ControlStyles.SupportsTransparentBackColor, True) BackColor = Color.Transparent Local_Timer = New Timer With Local_Timer .Interval = 50 .Enabled = True .Start() End With AddHandler Local_Timer.Tick, AddressOf TimerOnClick End Sub Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams Get Dim cp As CreateParams cp = MyBase.CreateParams cp.ExStyle = &H20 Return cp End Get End Property Protected Overrides Sub OnMove(ByVal e As System.EventArgs) MyBase.OnMove(e) RecreateHandle() End Sub Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) MyBase.OnPaint(e) If Local_Image IsNot Nothing Then _ e.Graphics.DrawImage(Local_Image, New Rectangle(0, 0, (Width / 2) - (Local_Image.Width / 2), (Height / 2) - (Local_Image.Height / 2))) End Sub Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs) ' DO NOT PAINT BACKGROUND End Sub ''' <summary> ''' Hack ''' </summary> ''' <remarks></remarks> Public Sub ReDraw() RecreateHandle() End Sub Private Sub TimerOnClick(ByVal sender As Object, ByVal e As System.EventArgs) RecreateHandle() Local_Timer.Stop() End Sub Public Property Image As Image Get Return Local_Image End Get Set(ByVal value As Image) Local_Image = value RecreateHandle() End Set End Property End Class 

在这个回复的底部引用了一个类似的post列表。

这个答复地址pictureBoxes和Winforms(在下面的其他post中,几个重申,WPF已经很好地解决了这个问题)

  1. 创buildWinform
  2. 创buildx2图片框
    • foreground_pictureBox //“背景”前面的图片框
    • background_pictureBox //图片框'后面''前景'
  3. 为每个pictureBox添加“paint”事件
    • 在“devise师”中select对象
    • select“属性”选项卡(或右键单击并从popup菜单中select)
    • select事件button(小闪电)
    • 双击“paint”事件右侧的空白字段
  4. 将以下代码添加到主窗体的“加载”function(如果尚未添加,请使用第3步中的方法并select“加载”而不是“绘制”)

=

 private void cFeedback_Form_Load(object sender, EventArgs e) { ... // Ensure that it is setup with transparent background foreground_pictureBox.BackColor = Color.Transparent; // Assign it's 'background' foreground_pictureBox.Parent = background_pictureBox; ... } 

5。 在'background_pictureBox'的'paint'调用中:

=

 private void background_pictureBox_Paint(object sender, PaintEventArgs e) { ...foreground_pictureBox_Paint(sender, e); } 

6。 在“foreground_pictureBox_Paint”调用中,添加要在前景中显示的任何graphics调用。

这个话题似乎在几个post中重演:

如何对化妆的PictureBox透明

C-尖PictureBox的透明背景-犯规-似乎到工作

使重叠-PictureBox的透明式-C-净

一,图片框,问题

我总是发现,我不得不自己合成图像,使用一个图片框或控件。 有两个透明部分的图片盒从来没有为我工作。