我有一个需要显示的灰度像素值数组(浮动为 1 的分数),然后可能会保存。这些值只是来自计算,所以我目前没有安装任何库或任何东西。我一直在尝试找出 CImage 库,但对可视化这些数据需要做的事情不太了解。任何帮助,将不胜感激!
谢谢你。
我已经成功使用的一种可能的方法是使用 D3DX 的纹理函数来创建 Direct3D 纹理并填充它。启动 D3D 有一些开销,但它为您提供了多线程纹理创建和内置的 ish 查看,以及保存到文件而不用大惊小怪。
如果您对使用 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
}
相应的功能可用于体积/3D 纹理。由于它们已经为 D3D 设置,您可以简单地将纹理渲染到平面四边形以查看,或用作您可能想要的任何图形应用程序的源。
只要您的生成器是线程安全的,您就可以在每个纹理的一个线程中运行创建/填充/保存,并同时生成多个切片或帧。
我发现这个问题的最佳解决方案是使用 SFML 库 (www.sfml-dev.org)。使用非常简单,但如果你想和 VS2010 一起使用,必须从源代码编译。
您可以在没有任何库的情况下使用PNM 图像格式。(格式本身很简单)。但是它非常陈旧,您必须有一个支持它的图像查看器。例如,IvanView 在 Windows 上支持它。