无法将 Basler 的 Pylon IImage.PixelData 转换为 C# 位图

问题描述 投票:0回答:2

代码如下。在创建位图的步骤中,我收到“参数无效”异常。我猜测 scrapResult.PixelData 不是 C# 可以转换为图像的格式,但我不确定如何弥补这一差距。我已经确认相机正在 Mono8 中拍照。

            IGrabResult grabResult = camera.StreamGrabber.RetrieveResult(5000, TimeoutHandling.ThrowException);
            using (grabResult)
            {
                if (grabResult.GrabSucceeded)
                {
                    byte[] buffer = grabResult.PixelData as byte[];
                    using (var ms = new MemoryStream(buffer))
                    {
                        ms.Seek(0, SeekOrigin.Begin);
                        var bmp = new Bitmap(ms);
                    }
                }
            }
c# bitmap camera basler
2个回答
1
投票

有两种将图像表示为字节的通用方法。使用某种类型的文件格式,例如 .png、.jpeg 等。这些文件格式通常经过压缩以减小大小,并包含各种类型的元数据。

basler 使用的另一个是原始像素数据。要利用此功能,您需要元数据,例如图像宽度、高度、步幅和像素格式,以正确重建图像。

幸运的是,抓取结果应该包含您需要的一切。但彩色图像还存在另一个可能的问题,相机可能会产生一些奇怪的色彩空间的图像,甚至可能没有去马赛克。因此您可能需要将其转换为常规 8 位 RGB。

执行此操作的代码应类似于:

var bitmap = new Bitmap(grabResult.Width, grabResult.Height, PixelFormat.Format24bppRgb).
var bitmapData = bitmap.LockBits(
    new Rectangle(0, 0, target.Width, target.Height),
    ImageLockMode.ReadWrite,
    bitmap.PixelFormat);
try
{
    var converter = new PixelDataConverter()
{
    OutputPixelFormat = PixelType.BGR8packed
};
    converter.Convert(
        bitmapData.Scan0,
        bitmapData.Stride * bitmapData.Height * 3,
        grabResult.PixelDataPointer,
        grabResult.PayloadSize,
        grabResult.PixelTypeValue,
        grabResult.Width,
        grabResult.Height,
        grabResult.PaddingX,
        grabResult.Orientation
    );
}
finally
{
    target.UnlockBits(bitmapData);
}

要格外注意“步幅”。这是每行像素上的字节数。由于对齐要求,这可能大于像素数乘以每个像素的字节数。 Pylon 显然使用“填充”来描述这些额外字节数。我希望转换器采取目标步幅或填充,但我看不到任何此类参数。

另请注意,由于 字节顺序 问题,Format24bppRgb 和 pylons BGR8packed 意味着相同的事情。不幸的是,这令人困惑。

为了方便起见,图书馆还可能提供一些

.ToBitmap()
转换方法。我没有详细研究文档,无论如何我们都使用原始像素数据。


0
投票

查看 pylon SDK C# 示例 -

PylonLiveView/MainForm.cs

此代码示例使用辅助类 PixelDataConverter 以及 C# 的 Bitmap 类,允许用户从多种输入相机像素格式进行转换。

© www.soinside.com 2019 - 2024. All rights reserved.