C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[55118] Re:Re:ejaqufk4
권창구.태원아빠 [shiftcap] 2051 읽음    2008-11-06 14:34
일단 그런 현상이 생기는 이유는 오버레이 때문입니다.
근데 이 오버레이 하나만 사용할 수 있기에 여러개의 동영상이 재생 되면
첫번째 동영상만 오버레이를 사용할 수 있고 나머지 동영상은 오버레이를 사용할 수 없습니다.
물론 재생에는 상관없고 잘 나옵니다. 단, 오버레이를 안쓰면 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를 만들었는데.. 곰플레이어를 캡쳐할때와 똑같이... 화면캡쳐가 안됩니다 )
: :
: :
: : 수고하세요..

+ -

관련 글 리스트
55084 ejaqufk4 linuxman 1194 2008/11/03
55085     Re:ejaqufk4 장성호 1375 2008/11/03
55118         Re:Re:ejaqufk4 권창구.태원아빠 2051 2008/11/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.