【发布时间】:2013-08-23 10:40:31
【问题描述】:
我正在尝试使用 CUDA 解码器项目中的代码将解码后的图像文件另存为 BMP 图像。
if (g_bReadback && g_ReadbackSID)
{
CUresult result = cuMemcpyDtoHAsync(g_bFrameData[active_field], pDecodedFrame[active_field], (nDecodedPitch * nHeight * 3 / 2), g_ReadbackSID);
long padded_size = (nWidth * nHeight * 3 );
CString output_file;
output_file.Format(_T("image/sample_45.BMP"));
SaveBMP(g_bFrameData[active_field],nWidth,nHeight,padded_size,output_file );
if (result != CUDA_SUCCESS)
{
printf("cuMemAllocHost returned %d\n", (int)result);
}
}
但保存的图像看起来像这样
谁能帮我看看我做错了什么..谢谢。
【问题讨论】:
-
尝试使用
cuMemcpyDtoH而不是cuMemcpyDtoHAsync,看看是否有任何不同。 -
不输出还是一样的
-
在这种情况下,我可以看到您没有 CUDA 编程问题。唯一明显可能出错的是您正在使用异步内存传输,在您开始保存帧之前可能无法完成。但这没有帮助。所以这两种选择要么是——从 GPU 出来的数据已经错误(这可能意味着它被破坏了),要么保存例程期望它接收到的数据与你传递的数据不同。您在此处显示的任何内容都无法解决这两个问题中的任何一个。
-
数据正在从结果显示正常的窗口中读取。我正在使用 CUDA 解码器 D3D9 示例代码并尝试保存从窗口读取的帧。他们说帧存储在 BYTE* 数组 g_bFrameData[active_field] 中,我试图将其保存为 bmp 文件..
标签: c++ visual-studio-2010 visual-c++ image-processing cuda