【发布时间】:2014-12-05 01:59:48
【问题描述】:
我有 C# dll,我在 Matlab 中使用它来返回存储在 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));
}
}
【问题讨论】:
-
您想要
C#或Matlab的答案吗?至少对于第二部分(翻转图像),Matlab 可以在一行中完成。 -
我对这里使用
ImageConverter持怀疑态度。您可以使用其他机制(如LockBits()方法)直接访问实际的位图数据,无需标题。如果您尝试将byte[]传递给 Matlab 并需要帮助,您还需要具体说明您尝试创建的格式。大概是byte[],但还有什么?任何特定的像素格式? Matlab 是否有您需要遵循的特定步幅规则?那种东西。 -
我希望在 C# 中完成这项工作,而不是 matlab。我只想要一个原始字节数组,以便 Matlab 可以将其作为 uint8 数组读取。 LockBits 看起来让我解决了标题问题。谢谢
-
但是,我看不到从 BitMapData 到 bytes[] 的方法。