簡體   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