2012-04-26 1 views
0

Rgb24가있는 WriteableBitmap을 pixelFormat으로 변환하려고합니다. Bgr 형식의 EmguCV Image에 동일한 이미지를 저장하려고합니다. 다음 코드를 작성했지만 적절한 결과를 제공하지 않습니다.RGB24 픽셀 형식의 WriteableBitmap을 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에 덤핑하고 비트 맵 변수에 덤프하여이 작업을 수행했습니다. 다음은

은 예입니다 비트 맵 난 당신이 훨씬 느릴 수 루프 중첩을 통해 이동이 없기 때문에이 방법은 더 나은 방법이라고 생각

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

변수 WriteableBitmap입니다. 어쨌든 희망이 당신을 위해 작동