C#BitmapSource - 结果垂直翻转

时间:2015-03-26 17:28:10

标签: c# wpf format pixel

我正在C#/ WPF中实现一个从相机录制图像的软件。 结果是一个Bitmap,我将其复制到byte []。

pixelFormat = System.Windows.Media.PixelFormats.Bgr24;
int size = buffer.FrameType.BufferSize;
byte[] img = new byte[size];
Marshal.Copy(buffer.GetImageDataPtr(), img, 0, size);

我正在使用这个byte []创建一个BitmapSource,但我得到的结果是垂直翻转的。

int stride = width * (pixelFormat.BitsPerPixel / 8);
image = BitmapSource.Create(width,
                             height,
                             96,
                             96,
                             pixelFormat,
                             BitmapPalettes.Gray256Transparent,
                             img,
                             stride);

What I get from the camera directly

What I am getting from my software

根据我的观点可能是一个问题,就是PixelFormat。相机正在使用system.drawing.imaging.pixelformat,而我正在使用System.Windows.Media.pixelformat。 相机正在使用RGB24,但文档称其“使用BGR顺序为RGB24像素格式。图像缓冲区中像素的组织是从左到右,从下到上。”

可能是什么问题?我使用了错误的像素格式吗?

1 个答案:

答案 0 :(得分:0)

彼得·邓尼霍和克莱门斯是对的。 这是解决方案:

int size = buffer.FrameType.BufferSize;
int height = buffer.FrameType.Height;
byte[] img = new byte[size];
int lineSize = buffer.BytesPerLine;
//for each row of the image
for (int row = 0; row < height; row++)
{
     //For each byte on a row
     for (int col = 0; col < lineSize; col++)
     {
           int newIndex = (size - (lineSize * (row + 1))) + col;
           img[newIndex] = buffer[col, row];
     }
}