我在 c#/.net 中有一个正常运行的应用程序,它目前从一组嵌入式相机中接受拜耳格式的原始图像数据,并将它们转换为 jpeg 图像。为了节省传输时间,我修改了嵌入式设备以在传输之前将图像编码为 jpeg。我是一位经验丰富的嵌入式程序员,但完全是个 c#/.net 菜鸟。我已经设法修改应用程序以使用此代码段将数组保存到具有 jpeg 名称的文件中:(5 的偏移量用于跳过传输帧中的 header 数据)
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);
但是这会抛出一个参数无效的异常。作为一个新手,我对图像的所有类和方法有点不知所措,看起来我所做的应该是司空见惯的,但我在通常的地方找不到任何例子。有什么想法吗?
最佳答案
我认为您正在寻找 Bitmap.FromStream()
:
Bitmap bmpImage = (Bitmap)Bitmap.FromStream(stream);
实际上使用 new Bitmap(stream)
应该也有效 - 这意味着流中的数据不构成有效图像 - 你确定 jpg 有效吗?您可以将它保存到磁盘并打开它,即在 Paint 中打开它进行测试吗?
关于c# - 如何将数组中的 jpeg 转换为位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5160299/