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

时间:2014-12-04 16:45:48

标签: c# .net image matlab

我在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));
    }
}

1 个答案:

答案 0 :(得分:1)

你的意思是这样的:

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];
    }
}

来源: Algorithm to vertically flip a bitmap in a byte array