일단 그런 현상이 생기는 이유는 오버레이 때문입니다.
근데 이 오버레이 하나만 사용할 수 있기에 여러개의 동영상이 재생 되면
첫번째 동영상만 오버레이를 사용할 수 있고 나머지 동영상은 오버레이를 사용할 수 없습니다.
물론 재생에는 상관없고 잘 나옵니다. 단, 오버레이를 안쓰면 CPU 사용량이 올라가게 됩니다.
그러니 아주 간단히 해결하시려면
PC 사양이 넉넉하시다는 가정하에 원하시는 동영상을 재생하시기에 앞서서.
아주 작은 동영상을 화면에 안보이는 상태에서 생성->재생->정지 시켜둡니다.( 오버레이를 사용하겠죠. )
그리고 님께서 원하시는 동영상을 재생합니다. (이제부터는 오버레이를 사용할 수 없습니다.)
그러면 그냥 이전에 하시던 데로 캡쳐가 가능합니다.
그럼.
장성호 님이 쓰신 글 :
: 에.. 저도 잘 해보진 못했는데요
: 일반속으로 동영상 player는 DirectX 를 이용합니다.
:
: DirectX쪽은 잘몰라서 제 설명이 틀릴수 있는데요
:
: DirectX 하드웨어 가속기가 돌아가고 있는경우는 이방익으로 캡쳐 안됩니다.
:
: 키보드에 있는 "프린트스크린" 클릭해도 캡쳐안됩니다.
:
: 방법1.
: 하드웨어 가속기를 끄고 캡쳐합니다.
:
: 윈도우 시작-실행-dxdiag 입력하시고 엔터치면 DirectX진단도구가 뜹니다.
: 거기서 "디스플레이" 탭에서 "DirectDraw 가속"을 사용안함으로 하시고 캡쳐하시면 됩니다.
:
: 방법2.
: directX화면을 캡쳐하는 프로그램을 사용합니다.
:
:
: 방법3.
: 직접 directX 코딩으로 프레임버퍼의 내용을 읽어옵니다.
: 개인적으로 아직 해보진 못했습니다
: 참조
:
http://blog.naver.com/mysticodoi?Redirect=Log&logNo=140023932991 (되는지 확인못함)
:
http://persuade.bnp.co.kr/bbs/view.php?id=imb5&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=107
:
:
: directX화면 캡쳐 성공하면 샘플좀 올려주세요
: 저도 좀 참고하게...
:
: 그럼..
:
:
: linuxman 님이 쓰신 글 :
: : 안녕하세요...<장성호님..디버깅 관련 글 고맙습니다...(원했던 답변으로 ... 아주 인상깊게 보았습니다)>
: :
: : 하나의 타이머에서... 스크린 전체를 bitmap 캡처해서 hdd에 저장... 했다가
: : 다시 뿌려주는데... 화면에 동영상이 돌고 있는 자리는 검은색으로만 표시됩니다.
: :
: : 동영상이 실행되고 있는 자리를 캡쳐 하고 싶은데... 일반적인 화면 캡쳐하는 방법으로는 안되는것은데..
: : 어떤 방법으로 해결할수 있나요?
: :
: :
: :
: : ==== test code===
: : void __fastcall TForm1::Timer1Timer(TObject *Sender)
: : {
: : AnsiString msg;
: : static int i=0;
: : msg.sprintf("Screen Shoot %d",i++);
: : lblShot->Caption=msg;
: : HDC dc = GetDC(0);
: : Graphics::TCanvas *s = new Graphics::TCanvas;
: : s->Handle=dc;
: :
: :
: : screenImage = new TImage(Form1);
: : screenImage->Picture->Bitmap->Width=Screen->Width;
: : screenImage->Picture->Bitmap->Height=Screen->Height;
: : TRect rect = Rect ( 0, 0,Screen->Width, Screen->Height);
: : screenImage->Picture->Bitmap->Canvas->CopyRect(rect,s, rect );
: : screenImage->Picture->Bitmap->SaveToFile("c:\\a.bmp");
: :
: : delete s;
: : delete screenImage;
: : ReleaseDC (NULL,dc);
: :
: :
: : Image1->Picture->Bitmap->LoadFromFile( "c:\\a.bmp" );
: :
: : }
: :
: :
: : ( 첨부된 화일 aa.jpg는 곰플레어를 캡쳐한것인데... 실제로 저는 direct show를 이용한 dspack2.34 이용해서 player를 만들었는데.. 곰플레이어를 캡쳐할때와 똑같이... 화면캡쳐가 안됩니다 )
: :
: :
: : 수고하세요..