2012-04-26 6 views
0

Я пытаюсь преобразовать WriteableBitmap, который имеет Rgb24 как pixelFormat. Я хочу сохранить одно и то же изображение в изображение EmguCV, имеющее формат Bgr. Я написал следующий код, но он не дает соответствующих результатов.Как преобразовать WriteableBitmap в формате RGB24 в формат EmguCV <Bgr, Byte>?

public unsafe void Convert(WriteableBitmap bitmap) 
    { 
     byte[] retVal = new byte[bitmap.PixelWidth * bitmap.PixelHeight * 4]; 
     bitmap.CopyPixels(new Int32Rect(0, 0, bitmap.PixelWidth, bitmap.PixelHeight), retVal, bitmap.PixelWidth * 4, 0); 

     Bitmap b = new Bitmap(bitmap.PixelWidth, bitmap.PixelHeight); 
     int k = 0; 
     byte red, green, blue, alpha; 
     for (int i = 0; i < bitmap.PixelWidth; i++) 
     {     
      for (int j = 0; j < bitmap.PixelHeight && k<retVal.Length; j++) 
      { 
       alpha = retVal[k++]; 
       blue = retVal[k++]; 
       green = retVal[k++]; 
       red = retVal[k++]; 

       System.Drawing.Color c = new System.Drawing.Color(); 
       c = System.Drawing.Color.FromArgb(alpha, red, green, blue); 

       b.SetPixel(i, j, c); 
      } 
     } 
     currentFrame = new Image<Bgr, byte>(b); 

     currentFrame.Save("Converted.jpg"); 
} 

Заранее спасибо.

ответ

2

Вы все еще получаете эту ошибку? Я, наконец, получил эту работу, сбросив данные из переменной WriteableBitmap в MemoryStream, а затем оттуда в переменную Bitmap.

Ниже приведен пример: растровыми является WriteableBitmap переменного

BitmapEncoder encoder = new BmpBitmapEncoder(); 
encoder.Frames.Add(BitmapFrame.Create(bitmap); 
MemoryStream ms = new MemoryStream(); 

encoder.Save(ms); 
Bitmap b=new Bitmap(ms); 
Image<Bgr, Byte> image = new Image<Bgr, Byte>(b); 

Я думаю, что этот путь является лучшим подходом, потому что вы не должны пройти через вложенную для петель, которые могут быть гораздо медленнее. В любом случае надеюсь, что это сработает для вас

 Смежные вопросы

  • Нет связанных вопросов^_^