我在c#/ .net中有一个正常运行的应用程序,它目前接受来自一组嵌入式摄像机的拜耳格式的原始图像数据,并将它们转换为jpeg图像。为了节省传输时间,我修改了嵌入式设备,在传输之前将图像编码为jpegs。我是一位经验丰富的嵌入式程序员,但总是c#/ .net noob。我已设法修改应用程序,使用此片段将数组保存到文件,并使用jpeg名称:(偏移量为5,以跳过传输帧中的标题数据)
FileStream stream = File.Create(fileName);
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(multiBuff.msgData, 5, multiBuff.dataSize - 5);
writer.Close();
文件打开正常,但现在我想将数据视为位图而无需保存&从文件加载。我在数据数组上尝试了以下内容:
MemoryStream stream = new MemoryStream(data);
BinaryReader reader = new BinaryReader(stream);
byte[] headerData = reader.ReadBytes(5);
Bitmap bmpImage = new Bitmap(stream);
但是这会抛出一个参数无效的异常。作为一个新手,我对图像的所有类和方法有点不知所措,看起来我正在做的应该是平常的,但我在常见的地方找不到任何例子。有什么想法吗?
答案 0 :(得分:2)
我认为您正在寻找Bitmap.FromStream()
:
Bitmap bmpImage = (Bitmap)Bitmap.FromStream(stream);
实际上使用new Bitmap(stream)
也应该有效 - 这意味着流中的数据不构成有效图像 - 你确定jpg有效吗?你能把它保存到磁盘并打开它,即在Paint中测试吗?
答案 1 :(得分:1)
您使用Image
类。
Image image;
using (MemoryStream stream = new MemoryStream(data))
{
image = Image.FromStream(stream);
}
答案 2 :(得分:0)
仅供参考,因为reader.ReadBytes(5)返回流的5个第一个字节而不是位置5之后的字节