g.DrawImage
要......是的,在我的图片框中画一幅图像。是否可以赋予它不透明度属性?我一直在寻找DrawImage的其他版本但却找不到这样的东西!
答案 0 :(得分:7)
您必须使用ColorMatrix来混合图像。这是我刚才写的C#控件,它向您展示了您需要的基本代码。不是VB.NET代码,但是,嘿,你没有尝试过真正的努力:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
public class BlendPanel : Panel {
public BlendPanel() {
DoubleBuffered = true;
}
public Image Image1 {
get { return mImg1; }
set { mImg1 = value; Invalidate(); }
}
public Image Image2 {
get { return mImg2; }
set { mImg2 = value; Invalidate(); }
}
public float Blend {
get { return mBlend; }
set { mBlend = value; Invalidate(); }
}
protected override void OnPaint(PaintEventArgs e) {
if (mImg1 == null || mImg2 == null)
e.Graphics.FillRectangle(new SolidBrush(this.BackColor), new Rectangle(0, 0, this.Width, this.Height));
else {
Rectangle rc = new Rectangle(0, 0, this.Width, this.Height);
ColorMatrix cm = new ColorMatrix();
ImageAttributes ia = new ImageAttributes();
cm.Matrix33 = mBlend;
ia.SetColorMatrix(cm);
e.Graphics.DrawImage(mImg2, rc, 0, 0, mImg2.Width, mImg2.Height, GraphicsUnit.Pixel, ia);
cm.Matrix33 = 1F - mBlend;
ia.SetColorMatrix(cm);
e.Graphics.DrawImage(mImg1, rc, 0, 0, mImg1.Width, mImg1.Height, GraphicsUnit.Pixel, ia);
}
base.OnPaint(e);
}
private Image mImg1;
private Image mImg2;
private float mBlend;
}
答案 1 :(得分:2)
感谢Hans Passant 这非常有用!它节省了我的时间
我已将您的代码转换为VB
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Windows.Forms
Public Class BlendPanel
Inherits Panel
Public Sub New()
DoubleBuffered = True
End Sub
Public Property Image1() As Image
Get
Return mImg1
End Get
Set
mImg1 = value
Invalidate()
End Set
End Property
Public Property Image2() As Image
Get
Return mImg2
End Get
Set
mImg2 = value
Invalidate()
End Set
End Property
Public Property Blend() As Single
Get
Return mBlend
End Get
Set
mBlend = value
Invalidate()
End Set
End Property
Protected Overrides Sub OnPaint(e As PaintEventArgs)
If mImg1 Is Nothing OrElse mImg2 Is Nothing Then
e.Graphics.FillRectangle(New SolidBrush(Me.BackColor), New Rectangle(0, 0, Me.Width, Me.Height))
Else
Dim rc As New Rectangle(0, 0, Me.Width, Me.Height)
Dim cm As New ColorMatrix()
Dim ia As New ImageAttributes()
cm.Matrix33 = mBlend
ia.SetColorMatrix(cm)
e.Graphics.DrawImage(mImg2, rc, 0, 0, mImg2.Width, mImg2.Height, _
GraphicsUnit.Pixel, ia)
cm.Matrix33 = 1F - mBlend
ia.SetColorMatrix(cm)
e.Graphics.DrawImage(mImg1, rc, 0, 0, mImg1.Width, mImg1.Height, _
GraphicsUnit.Pixel, ia)
End If
MyBase.OnPaint(e)
End Sub
Private mImg1 As Image
Private mImg2 As Image
Private mBlend As Single
End Class