2017-02-04 7 views
1

PictureBox에서 작은 비디오를 재생하고 싶습니다. 바탕 화면에 .png 확장자의 151 프레임이 들어있는 폴더가 있습니다.C# - 그림 상자에서 비디오를 재생하려고 시도합니다.

가 암시 적으로 그렇게하지 System.IO.FileInfo

System.Drawing.Image에 유형으로 변환 할 수 없습니다라는 오류가 있기 때문에

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

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

이 작동하지 않습니다이 이미 시도 것입니다 FileInfoImage으로 만드는 방법을 알고 있어야합니다. 는 (. BTW 코드에서 벽난로 폴더는 프레임이 들어있는 폴더입니다.)

+0

사용이 [Image.FromFile (https://msdn.microsoft.com/en-us/library/system.drawing.image.fromfile (V = vs.110)에서 .aspx) –

+0

또한 추가 할 수 'System.Windows.Forms.Timer'를 실행하면 이미지가 전환됩니다. – BladeMight

+0

John Wu, 예제 코드를 보여줄 수 있습니까? Im 그런 멍청한 녀석은 그것을 사용하는 방법을 모릅니다> _ < – diPokiI

답변

1

나의 제안은 하나의 List<Bitmap>에 모든 이미지를로드 한 후 PictureBox 내부의 사진을 변경 Timer을 사용하는 것입니다 :

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(); 
+0

당신은 5 분으로 저를 때려. – BladeMight

+0

@BladeMight 언제든지 다른 사람이 더 도움이 될 것입니다. :) –

+0

@ m.rogalski Nah, 거의 동일 :] – BladeMight

0

m.rogalski :

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++; 
    }