我正在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);
根据我的观点可能是一个问题,就是PixelFormat。相机正在使用system.drawing.imaging.pixelformat,而我正在使用System.Windows.Media.pixelformat。 相机正在使用RGB24,但文档称其“使用BGR顺序为RGB24像素格式。图像缓冲区中像素的组织是从左到右,从下到上。”
可能是什么问题?我使用了错误的像素格式吗?
答案 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];
}
}