繁体   English   中英

c# - 尝试在图片框中播放视频

[英]c# - trying to play a video in a picturebox

我想在PictureBox播放一个小视频。 我的桌面上有一个文件夹,其中包含 151 个带有 .png 扩展名的帧。 这是我已经尝试过的:

System.IO.DirectoryInfo di = new DirectoryInfo("c:\\Users\\" + Environment.UserName + "\\Desktop\\fireplace");

foreach (FileInfo file in di.GetFiles())
{
    pictureBox1.Image = file;
}

这不起作用,因为有一个错误说:

无法将System.IO.FileInfo类型隐式转换为System.Drawing.Image

我不知道如何将FileInfo变成Image (顺便说一句。代码中的壁炉文件夹是包含框架的文件夹。)

我的建议是将所有图像加载到一个List<Bitmap> ,然后使用Timer更改PictureBox

List<Bitmap> _images = new List<Bitmap>();
int _currentImageIndex = 0;

int CurrentImageIndex
{
    get { return _currentImageIndex; }
    set {
        _currentImageIndex = value;
        if (InvokeRequired)
        {
            Invoke(new MethodInvoker( () => { _pictureBox.Image = _images[_currentImageIndex]; } );
        }
        else 
        {
            _pictureBox.Image = _images[_currentImageIndex];
        }
    }
}

Bitmap LoadImage(Stream stream)
{
    return new Bitmap(stream, false);
}

public void LoadImages(DirectoryInfo dInfo)
{
    foreach(FileInfo fInfo in dInfo.GetFiles())
    {
        if(InvokeRequired)
        {
            Invoke(new MethodInvoker( () => { _images.Add(LoadImage (fInfo.Open(FileMode.Open))); });
        }
        else
        {
            _images.Add(LoadImage (fInfo.Open()));
        }
    }
}

void WhenTimerTicks(object sender, EventArgs e)
{
    if(CurrentImageIndex < _images.Count)
        CurrentImageIndex++;
}

现在你所要做的就是阅读文件,然后设置你的计时器:

LoadImages(new DirectoryInfo("c:\\Users\\" + Environment.UserName + "\\Desktop\\fireplace"));

Timer t = new Timer();
t.Interval = 1000 / 25; // 25 FPS
t.Tick += WhenTimerTicks;
t.Start();

罗加斯基:

List<Bitmap> _images = new List<Bitmap>();
    int _currentImageIndex = 0;

    int CurrentImageIndex
    {
        get { return _currentImageIndex; }
        set
        {
            _currentImageIndex = value;
            if (InvokeRequired)
            {
                Invoke(new MethodInvoker(() => { pictureBox1.Image = _images[_currentImageIndex]; });
            }
            else
            {
                pictureBox1.Image = _images[_currentImageIndex];
            }
        }
    }

    Bitmap LoadImage(Stream stream)
    {
        return new Bitmap(stream, false);
    }

    public void LoadImages(DirectoryInfo dInfo)
    {
        foreach (FileInfo fInfo in dInfo.GetFiles())
        {
            if (InvokeRequired)
            {
                Invoke(new MethodInvoker(() => { _images.Add(fInfo.Open(FileMode.Open)); })); //Argument 1: cannot convert from 'System.IO.FileStream' to 'System.Drawing.Bitmap'
            }
            else
            {
                _images.Add(fInfo.Open(FileMode.Open)); //Argument 1: cannot convert from 'System.IO.FileStream' to 'System.Drawing.Bitmap'
            }
        }
    }

    void WhenTimerTicks(object sender, EventArgs e)
    {
        if (CurrentImageIndex < _images.Count)
            CurrentImageIndex++;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM