0

我有一个需要显示的灰度像素值数组(浮动为 1 的分数),然后可能会保存。这些值只是来自计算,所以我目前没有安装任何库或任何东西。我一直在尝试找出 CImage 库,但对可视化这些数据需要做的事情不太了解。任何帮助,将不胜感激!

谢谢你。

4

3 回答 3

2

我已经成功使用的一种可能的方法是使用 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 设置,您可以简单地将纹理渲染到平面四边形以查看,或用作您可能想要的任何图形应用程序的源。

只要您的生成器是线程安全的,您就可以在每个纹理的一个线程中运行创建/填充/保存,并同时生成多个切片或帧。

于 2012-08-15T19:07:04.367 回答
0

我发现这个问题的最佳解决方案是使用 SFML 库 (www.sfml-dev.org)。使用非常简单,但如果你想和 VS2010 一起使用,必须从源代码编译。

于 2012-08-16T20:48:32.780 回答
0

您可以在没有任何库的情况下使用PNM 图像格式。(格式本身很简单)。但是它非常陈旧,您必须有一个支持它的图像查看器。例如,IvanView 在 Windows 上支持它。

于 2012-08-16T20:53:25.663 回答