返回 BMP 文件中的原始图像位

本文关键字:原始 图像 BMP 文件 返回 | 更新日期: 2023-09-27 18:33:17

我在 Matlab 中使用了 C# dll 来返回存储在 BMP 文件中的原始 8 位灰度位。(是的,我知道 Matlab 可以读取 BMP,但这是一个测试,适用于数据来自视频图像采集卡的真实系统)。

现在,下面的代码返回了 1078 位需要剥离的标头信息,并且它还在翻转图像的轴(它在镜像中出现)。解决此问题的最佳方法是什么(最少的行,性能不是问题)。

image = Image.FromFile(this.imagePath);
ImageConverter converter = new ImageConverter();
data = (byte[])converter.ConvertTo(image, typeof(byte[]));
Frame f = new Frame(data);
public class Frame
{
    public byte[,] frameData = new byte[1024, 1024];
    public Frame(byte[] data)
    {
        Buffer.BlockCopy(data, 0, frameData, 0, 1024 * 1024 * sizeof(byte));
    }
}

返回 BMP 文件中的原始图像位

你的意思是这样的:

BitArray bits = new BitArray(returnBytes);
BitArray flippedBits = new BitArray(bits);
for (int i = 0; i < bits.Length; i += width) {
    for (int j = 0, k = width - 1; j < width; ++j, --k) {
        flippedBits[i + j] = bits[i + k];
    }
}

如果需要将图片颠倒镜像,请使用以下代码:

BitArray bits = new BitArray(returnBytes);
BitArray flippedBits = new BitArray(bits);
for (int i = 0, j = bits.Length - width; i < bits.Length; i += width, j -= width) {
    for (int k = 0; k < width; ++k) {
        flippedBits[i + k] = bits[j + k];
    }
}

源:垂直翻转字节数组中的位图的算法