【问题标题】:Best way to display a jpeg stream in visual studio c++在 Visual Studio C++ 中显示 jpeg 流的最佳方法
【发布时间】:2017-12-06 22:22:36
【问题描述】:

我正在尝试在 Visual Studio 中显示相机发送的 jpeg 流。数据格式为十六进制,并带有标准的 jpeg 标头。

好吧,我知道如何显示 jpeg 图像,所以我的计划是读取数据,使用文件 I/O 函数将其保存为 jpeg 文件,然后以表格形式显示。每次出现新图像时,正在显示的图像都会被替换(如刷新)。

这会是正确的方法吗?或者有没有其他功能或者方法可以实现?

谢谢。

【问题讨论】:

  • 这似乎取决于表单的类型 - 并且会因框架而异,但听起来像是一个不错的计划 A。
  • 也许添加显示文件中图像的代码?您可以edit您的问题添加此信息。
  • "数据格式是十六进制" 你确定这不仅仅是你在视觉上表现的方式吗?任何原始数据流都以 ASCII 格式传输是很奇怪的。更有可能是实际数据字节的 [二进制] 流。

标签: c++ image jpeg display


【解决方案1】:

您可以将数据视为图像文件流,但它在您的磁盘驱动器上很硬且效率不高。这是一种适合随意使用的程序,但在任何专业环境中都可能无法接受。

您收到二进制数据流,因此将其解码为 rgb 缓冲区,然后在 Windows 上通过使用 BitBlt 函数将像素直接写入屏幕来显示数据。

如果您没有自己的,请从https://github.com/MalcolmMcLean/babyxrc/tree/master/src 获取我的 JPEG 解码器。您可以简单地修改它以采用比特流而不是标准库文件 *。

【讨论】:

  • 感谢 Malcolm 的帮助,但要解码数据,首先我必须从传入流中“创建”一个 jpeg 文件,然后将其解码为 rgb 缓冲区,然后显示它,这是类似的流程我打算使用,唯一的区别是我显示jpeg而不解码它,我没有清楚地看到效率方面的优势,也许我很困惑,但是,你能解释一下有什么优势吗?
  • 数据是以原始 ppm (rgb) 值还是以 JPEG 编码流的形式传入的?
  • 它以 JPEG 编码流的形式出现,例如我可以将传入的十六进制值打印并保存在文本文件中,然后将扩展名更改为 jpeg 并查看图像。
  • 好的,我想明白了,我会尝试将 jpeg 文件解码为 rgb 值,然后在不创建文件的情况下显示它们,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 2010-12-13
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
相关资源
最近更新 更多