[英]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.