[XNA , Texture2D] Texture2D from Bitmap (fast copy)


종전의 방식 (http://scripter.egloos.com/2548511) 으로는 너무 느려 실시간으로 이미지를 갱신하는데에
무리가 있었다.

그래서 아에 Stream 으로 복사하는 방법을 찾았고 Aforge 의 영상을 붙이는데 성공했다.







이전의 http://www.codeproject.com/KB/game/VidTextureClassWebcamApp.aspx?msg=2630927
보다 화질은 좋아졌다.(쨍 .. 하다..)
간혹 보이는 계단현상이 없어졌다.

속도는 .. 처음엔 조금 딜레이가 생기다가 곧 VideoTexture 만큼 복귀 되었으나 약간 속도가
불안정하긴 했다.

하지만 VideoTexture 에서 런타임중 간헐적으로 나오는 오퍼레이터 에러는 없어 덜컥? 거리는 현상이
없다.

그리고 VideoTexture 보다는 시피유 점유율이 조금 높게 나왔다.

Created with colorer-take5 library. Type 'csharp'

private Texture2D tx;
        //Aforge �� 플레이어
        VideoSourcePlayer player = new VideoSourcePlayer();

        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(GraphicsDevice);
            tx = new Texture2D(graphics.GraphicsDevice, 1024, 768);//dummy;


            //Aforge �� 디바이스 설정 
            FilterInfoCollection device = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            VideoCaptureDevice cam = new VideoCaptureDevice(device[0].MonikerString);
            
            player.VideoSource = cam;
            player.Start();

            //플레이어가 갱신될때 마다 ��출
            player.NewFrame += new VideoSourcePlayer.NewFrameHandler(player_NewFrame);
        }


        //인��로 비트맵을 받음
        void player_NewFrame(object sender, ref Bitmap _image)
        {
            //비트맵�� 고속 복사
            MemoryStream camStream = new MemoryStream();
            player.GetCurrentVideoFrame().Save(camStream, ImageFormat.Bmp);
            camStream.Position = 0;
            tx = Texture2D.FromFile(graphics.GraphicsDevice, camStream);
            
        }
 
 
 
포인트 : 비트맵의 고속복사. 


나중에 곧.. ? Aforge의 VideoSourcePlayer의 stream 을 직접 참조 할수 있는 방법을 모색하여 좀더
높은 퍼포먼스를...
Yamecoder 야매코더_
tags : , , ,
분류없음 2010.12.04 03:48
Powerd by Tistory, designed by criuce
rss