Windows 窗体图片框中的图像转换 [英] Transition of images in Windows Forms Picture box

查看:26
本文介绍了Windows 窗体图片框中的图像转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 Windows 窗体的新手,在我的项目中,我需要在运行时更改图片框中的图像.我可以在计时器的帮助下做到这一点.只是图片变了.是否可以在图像更改时进行一些转换,例如淡入、淡出、模糊等.如果可能,请告诉我如何做.我在网上搜索但没有成功.提前致谢.

I'm new to Windows Forms, in my project, i need to change the image in the picture box at runtime. I'm able to do that with the help of a timer. The picture just gets changed. Is it possible to do some transitions when image changes, for example fade in, fade out, blur etc.. If possible could some one please let me know how to do it. I searched in net but in vain.Thanks in advance.

瓦伦

推荐答案

只需将新的代码文件粘贴到其中

Simply take new code file and paste below code in it

类似问题的原始答案,来自另一个问题>

答案

an original answer for the similar question, answer taken from another question

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;

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 从工具箱顶部拖放到您的表单上.这是一个使用它的示例程序:

Build your project. You can now drop a BlendPanel from the top of the toolbox onto your form. Here's a sample program that uses it:

    private float mBlend;
    private int mDir = 1;
    public int count = 0;
    public Bitmap[] pictures;

    public void myPhoto()
    {
        pictures = new Bitmap[9];
        pictures[0] = new Bitmap(@"Library Images\cf3.jpg");
        pictures[1] = new Bitmap(@"Library Images\cf4.jpg");
        pictures[2] = new Bitmap(@"Library Images\l1.JPG");
        pictures[3] = new Bitmap(@"Library Images\l2.JPG");
        pictures[4] = new Bitmap(@"Library Images\l3.JPG");
        pictures[5] = new Bitmap(@"Library Images\l4.JPG");
        pictures[6] = new Bitmap(@"Library Images\l5.JPG");
        pictures[7] = new Bitmap(@"Library Images\l6.JPG");
        pictures[8] = new Bitmap(@"Library Images\l7.JPG");

        timer1.Interval = 50; //time of transition
        timer1.Tick += BlendTick;
        try
        {
            blendPanel1.Image1 = pictures[count];
            blendPanel1.Image2 = pictures[++count];
        }
        catch
        {

        }
        timer1.Enabled = true;
    }
    private void BlendTick(object sender, EventArgs e)
    {
        mBlend += mDir * 0.02F;
        if (mBlend > 1)
        {
            mBlend = 0.0F;
            if ((count + 1) < pictures.Length)
            {
                blendPanel1.Image1 = pictures[count];
                blendPanel1.Image2 = pictures[++count];
            }
            else
            {
                blendPanel1.Image1 = pictures[count];
                blendPanel1.Image2 = pictures[0];
                count = 0;
            }
        }
        blendPanel1.Blend = mBlend;
    }

您需要修改 new Bitmap(@"yourimagePath"); 调用.构建并运行.您应该会看到显示的图像从第一张图像平滑地变形到第二张图像,没有任何闪烁.

You'll need to modify the new Bitmap(@"yourimagePath"); calls. Build and run. You should see the displayed image smoothly morph from your first image to your second image without any flickering.

我希望它对其他人有帮助...

I hope it helps for other...

这篇关于Windows 窗体图片框中的图像转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆