2013-06-28 3 views
1

WPFMediaKit의 VideoCaptureElement에서 이미지를 캡처하기 위해 사용하고있는 코드가 있습니다. 그것은 위대한 작품!WPFMediaKit에서 바이트 [] 이미지 데이터 캡처

bmp.Render(videoElement); 
    BitmapEncoder encoder = new JpegBitmapEncoder(); 
    encoder.Frames.Add(BitmapFrame.Create(bmp)); 
    string now = DateTime.Now.Year + "" + DateTime.Now.Month + "" + DateTime.Now.Day + "" + DateTime.Now.Hour + "" + DateTime.Now.Minute + "" + DateTime.Now.Second; 
    string filename = now + "pic.jpg"; 
    FileStream fstream = new FileStream(filename, FileMode.Open); 
    encoder.Save(fstream); 
    fstream.Close(); 

내가 직면 한 문제는 파일을 저장하는 대신 바이트 [] 데이터를 가져와야한다는 것입니다. 현재 내가 오픈의 FileDialog 상자와 파일 스트림과 함께이 일을하고있다 : 내가하고 싶은 무엇

  if (File.Exists(FileLocation)) 
      { 
       //Retreave image from file and binary it to Object image 
       using (FileStream stream = File.Open(FileLocation, FileMode.Open)) 
       { 
        BinaryReader br = new BinaryReader(stream); 
        byte[] data = br.ReadBytes(maxImageSize); 
        image = new Image(dlg.SafeFileName, data, fileSize); 
       } 
      } 

캡처를 가지고보다는 파일을 저장하는 것입니다, 나는 바이트로 좀하고 싶습니다 [] 유형. RenderTargetBitmap 또는 BitmapEncoder를 byre [] 배열로 변환하는 방법이 있습니까? 아니면 아마도 메모리 스트림으로 변환하여 이진 리더가 사용할 수 있을지 생각하고 있습니까?

감사합니다.

+0

this msdn link 당신이 원시 데이터를 하시겠습니까 참조하거나 (헤더) 메모리에 BMP 파일? –

답변

1

BitmapSource를 바이트 배열로 변환하려면 다음과 같이 할 수 있습니다. 여기서 bmp는 BitmapSource 또는 RenderTargetBitmap입니다.

BitmapEncoder encoder = new JpegBitmapEncoder(); 
encoder.Frames.Add(BitmapFrame.Create(bmp)); 

byte[] arr = null; 
using (MemoryStream memStream = new MemoryStream()) 
{ 
    encoder.Save(memStream); 
    arr = stream.ToArray(); 
} 
+1

+1,'memStream.ToArray()'는 메모리 스트림을 바이트 배열로 변환하는 약간 더 쉬운 방법이다. – vcsjones

+0

은 파일 크기가 memstream.length입니까? – Herrozerro

+0

그 vcsjones 주셔서 감사하고 memstream.length는 스트림의 바이트로 길이, 그래서 네, 당신은 그 인코더에 추가 한 이미지의 파일 크기를 말할 수 있습니다. – Zenchovey

0

이미 BMP 형식의 스트림에 저장 언급 이외에, 당신은 또한 BitmapSource는에 CopyPixels를 호출 할 수 있습니다.

이렇게하면 헤더가없는 원본 형식의 원래 픽셀을 얻을 수 있습니다.