2
의 미디어 플레이어 내 Windows 응용 프로그램에서 Windows Media Player dll을 사용하여 비디오를 재생합니다.Windows에서 재생중인 비디오의 이미지 가져 오기 C#
제 양식에는 현재 비디오 프레임을 찍을 버튼이 있습니다.
많은 테스트와 코드 검사를했는데 왜 현재 프레임의 사진을 찍을 수 없는지 알 수 없었습니다.
는이 코드를 시도하지만, 결과적인 이미지는 블랙이었다 사용자가 저장 경로를 선택하는 경우, 함수save file dialog
에 지정된 파일의 사용자로부터 영상 걸리므
private Graphics g = null;
private void btnTakePicture_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(axWMVMovie.URL))
{
axWMVMovie.Ctlcontrols.pause();
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
System.Drawing.Image ret = null;
try
{
Bitmap bitmap = new Bitmap(axWMVMovie.Width, axWMVMovie.Height);
{
g = Graphics.FromImage(bitmap);
{
Graphics gg = axWMVMovie.CreateGraphics();
{
timerTakePicFromVideo.Start();
}
}
using (MemoryStream ms = new MemoryStream())
{
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
ret = System.Drawing.Image.FromStream(ms);
ret.Save(saveFileDialog1.FileName);
}
}
}
catch
{
}
}
}
}
private void timerTakePicFromVideo_Tick(object sender, EventArgs e)
{
timerTakePicFromVideo.Stop();
g.CopyFromScreen(axWMVMovie.PointToScreen(new System.Drawing.Point()).X,
axWMVMovie.PointToScreen(new System.Drawing.Point()).Y, 0, 0,
new System.Drawing.Size(axWMVMovie.Width, axWMVMovie.Height));
}
내가 Timer
를 사용한다. 비디오 형식은 WMV입니다.
왜 * 타이머를 사용하여 비디오 *에서 사진을 찍고 있습니까? 제 생각에는 비트 맵이 생성 된 후에 tick_event 코드가 실행될 것입니다. 'g.CopyFromScreen (..)'을'btnTakePicture_Click (..)'으로 옮겨 보았습니까? –
+1. 중괄호 안의 호출 (예 : 'timerTakePicFromVideo.Start();'와 같은 아무것도하지 않는 호출)은 기괴합니다. – tomfanning
@PilgerstorferFranz 저장 대화 상자가 닫히고, 이미지가 저장되고 저장된 이미지가 저장 될 때까지 사용자가 저장 위치를 선택할 때 타이머를 사용합니다. –