gpt4 book ai didi

c# - 在 Windows 窗体中切换图像

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:14 26 4
gpt4 key购买 nike

我有 3 张图片,每张图片中都有一个彩色圆圈。 3张图片分别是红色、绿色和黄色。

我将它放在一个 Windows 窗体的 PictureBox 中。我想将这些图像从绿色切换为黄色再切换为红色或其他。

有什么方法可以让它们相互淡入淡出,而不是以正常方式切换它们?

我知道这可以使用 flash/j-query 轻松完成,但我想知道我能做到多远。

使用普通 Windows 窗体功能的 Windows 窗体中的类似内容。

注意:我使用的是 .net framework 4 和 Windows 窗体。

最佳答案

参见 Transition of images in Windows Forms Picture box .在 this 上有一个使用计时器转换图像的解决方案页面。

网站代码:

public class BlendPanel : Panel 
{
private Image mImg1;
private Image mImg2;
private float mBlend;
public BlendPanel()
{
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint |
ControlStyles.OptimizedDoubleBuffer, 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);
}
}

构建您的项目。您现在可以将工具箱顶部的 BlendPanel 拖放到表单上。这是一个使用它的示例程序:

namespace WindowsApplication1 
{
public partial class Form1 : Form
{
private float mBlend;
private int mDir = 1;
public Form1()
{
InitializeComponent();
timer1.Interval = 30;
timer1.Tick += BlendTick;
blendPanel1.Image1 = Bitmap.FromFile(@"c:\temp\test1.bmp");
blendPanel1.Image2 = Bitmap.FromFile(@"c:\temp\test2.bmp");
timer1.Enabled = true;
}

private void BlendTick(object sender, EventArgs e)
{
mBlend += mDir * 0.02F;
if (mBlend < 0) { mBlend = 0; mDir = 1; }
if (mBlend > 1) { mBlend = 1; mDir = -1; }
blendPanel1.Blend = mBlend;
}
}
}

您需要修改 Bitmap.FromFile() 调用。构建并运行。您应该看到显示的图像从第一张图像平滑地变换到第二张图像,没有任何闪烁。有很多方法可以调整代码,玩得开心。

关于c# - 在 Windows 窗体中切换图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6843456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com