从浮点数组创建可视C++图像
Creating a Grayscale image in Visual C++ from a float array
我有一个灰度像素值数组(浮点数为 1 的分数),我需要显示,然后可能保存。这些值只是来自计算,所以我目前没有安装库或任何东西。我一直在尝试找出 CImage 库,但无法理解我需要做什么来可视化这些数据。任何帮助将不胜感激!
谢谢。
我使用的一种可能的方法取得了一些成功,那就是采用 D3DX 的纹理函数来创建 Direct3D 纹理并填充它。启动 D3D 有一些开销,但它为您提供了多线程纹理创建和内置查看功能,以及无需大惊小怪地保存到文件。
如果您对使用 D3D(X) 不感兴趣,这里的一些细节将没有用,但生成器应该有助于弄清楚如何为任何其他库输出数据。
例如,假设现有的 D3D9 设备pDevice
和噪声发生器(或其他纹理数据源)pGen
:
IDirect3DTexture9 * pTexture = nullptr;
D3DXCreateTexture(pDevice, 255, 255, 0, 0, D3DFMT_R8G8B8, D3DPOOL_DEFAULT, &pTexture);
D3DXFillTexture(pTexture, &texFill, pGen);
D3DXSaveTexture("texture.png", D3DXIFF_PNG, pTexture, NULL);
发电机功能:
VOID WINAPI texFill(
D3DXVECTOR4* pOut,
CONST D3DXVECTOR2* pTexCoord,
CONST D3DXVECTOR2* pTexelSize,
LPVOID pData,
) {
// For a prefilled array:
float * pArray = (float *)pData;
float initial = pArray[(pTexCoord->y*255)+pTexCoord->x];
// For a generator object:
Generator * pGen = (Generator*)pData; // passed in as the third param to fill
float initial = pGen->GetPixel(pTexCoord->x, pTexCoord->y);
pOut->x = pOut->y = pOut->z = (initial * 255);
pOut->w = 255; // set alpha to opaque
}
- D3DXCreateTexture: http://msdn.microsoft.com/en-us/library/windows/desktop/bb172800%28v=vs.85%29.aspx
- D3DXFillTexture: http://msdn.microsoft.com/en-us/library/windows/desktop/bb172833(v=vs.85).aspx
- D3DXSaveTextureToFile: http://msdn.microsoft.com/en-us/library/windows/desktop/bb205433(v=vs.85).aspx
相应的功能可用于体积/3D 纹理。由于它们已经针对 D3D 进行了设置,因此您可以简单地将纹理渲染为平面四边形进行查看,或用作您想要的任何图形应用程序中的源。
只要生成器是线程安全的,您就可以在每个纹理的一个线程中运行创建/填充/保存,并同时生成多个切片或帧。
我发现这个问题的最佳解决方案是使用SFML库(www.sfml-dev.org)。使用起来非常简单,但如果要与VS2010一起使用,则必须从源代码编译。
您可以使用 PNM 图像格式,而无需任何库。(格式本身是微不足道的)。但是,它非常古老,您必须有一个支持它的图像查看器。例如,IvanView在Windows上支持它。
相关文章:
- 可视化 如何在 c++ 中制作特定大小的文件?
- 可视化C++:发布模式的运行时库作为'Multi-threaded Debug DLL'
- 提升如何在图形可视化中写入边缘的权重?
- 如何在大型c++项目的可视化代码中设置调试
- 可视化编译与 C++ 中的 Extern 变量
- 可视化 Bazel C++预编译标头实现
- 无法为 X.radio 创建中等可视化,因为找不到网络节点可视化 - Omnet++
- C++合并排序可视化工具
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- 可视化 将字符串解析为数组以进行C++
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 可视化C++载体:未使用的容量
- 可视化 如何在 c++ 中截断
- 如何使用可视化代码和平台IO将环境变量注入CPP文件?
- 使用快速排序对 C++ 中的可视化工具错误进行排序
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- OpenCV 中大量可视化::Widget3D 的性能不佳
- GCC、CLANG 和 MSVC 的可视化C++自动矢量化要求
- 如何在可视化代码中生成用于 c++ 开发的调试器?
- 图形可视化作为窗口中的库