2013-06-28 60 views
1

我有一段代碼,我一直在從WPFMediaKit的VideoCaptureElement捕獲圖像。它工作得很好!從WPFMediaKit捕獲byte []圖像數據

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(); 

雖然我面臨的問題是我需要現在得到一個byte []數據而不是保存文件。目前,我有一個開放的FileDialog框和一個FILESTREAM這樣做:

  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

你想的原始數據,或內存(有頭)bmp文件? – 2013-06-28 16:53:28

回答

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格式的流,也可以撥打CopyPixels上的BitmapSource。

這將爲您提供原始格式的原始像素,不含標題。

this msdn link