2014-10-16 72 views
-1

我正在使用Microsoft的OCR庫,並且在將BitmapImage轉換爲像素數組時遇到問題。將位圖轉換爲適用於Microsoft OCR的像素陣列#

我爲Windows Phone 8製作了這個應用程序,而WriteableBitmap.PixelBuffer.ToArray()不是一個選項,所以我有一個靜態函數會將一個普通的BitmapImage改變成一個字節數組,以提供給OCR發動機。嗯,每次我在應用程序崩潰中餵食它。這裏有什麼問題?

這是我與位圖轉換器

public static class ByteArrayChange 
    { 
     public static byte[] ConvertToBytes(this BitmapImage bitmapImage) 
     { 
      byte[] data = null; 
      using (MemoryStream stream = new MemoryStream()) 
      { 
       WriteableBitmap wBitmap = new WriteableBitmap(bitmapImage); 
       wBitmap.SaveJpeg(stream, wBitmap.PixelWidth, wBitmap.PixelHeight, 0, 100); 
       stream.Seek(0, SeekOrigin.Begin); 
       data = stream.GetBuffer(); 
      } 

      return data; 
     } 
    } 

靜態類下面是在OCR方法的代碼段是造成應用程序崩潰。

byte[] pa = ByteArrayChange.ConvertToBytes(bitmap); 

      //Here Is he problem 
      var ocrResult = await ocrEngine.RecognizeAsync((uint)bitmap.PixelHeight, (uint)bitmap.PixelWidth, pa); 

我在做什麼錯在這裏? 謝謝!

+0

['RecognizeAsync'](http://msdn.microsoft.com/zh-cn/library/windowspreview.media.ocr.ocrengine.recognizeasync.aspx)表示它需要「BGRA8格式的圖像字節。 「你傳遞一個JPG格式的字節數組。 – dbc 2014-10-16 16:14:10

+0

'WriteableBitmap'具有['Pixels'](http://msdn.microsoft.com/zh-cn/library/windows/apps/system.windows.media.imaging.writeablebitmap.pixels%28v=vs.105% 29.aspx)屬性。那是你要的嗎? – dbc 2014-10-16 16:17:00

+0

Dbc,我該如何讓它變成BGRA8格式?而對於WriteableBitmap,它需要PixelBuffer屬性,除非像素在WP8框架中是相同的。 – user2536897 2014-10-16 16:19:43

回答

3

您將圖像保存爲JPEG,但我相當確定OCR庫接受RGB/BGRA作爲輸入。 那麼你爲什麼不使用Pixels屬性?它將圖像表示爲BGRA陣列,因此您只需將其轉換爲byte[]陣列。

+0

我該如何將其轉換爲byte []數組? – user2536897 2014-10-16 16:28:48

+0

@ user2536897你有沒有試過先google? http://stackoverflow.com/a/1964892 – 2014-10-16 16:31:42

+0

謝謝!我得到它的工作! – user2536897 2014-10-16 16:35:43