复制PBYTE数据(图像数据)时出现问题

时间:2018-07-10 15:38:13

标签: c++ image-processing byte copymemory

我正在尝试在插件调用中复制图像的数据。
在某些情况下,必须通过以下调用将源(pSrcBitmap)复制到目标(ppbResult)。
它应该超级简单-复制内存。
但是...我得到一个错误。

我将在下面显示真实的代码,但只显示相关部分:

HRESULT __stdcall COemUni::ImageProcessing(PDEVOBJ pdevobj, PBYTE pSrcBitmap,
    PBITMAPINFOHEADER pBitmapInfoHeader, PBYTE pColorTable,
    DWORD dwCallbackID, PIPPARAMS pIPParams, OUT PBYTE *ppbResult)
{
    UNREFERENCED_PARAMETER(pdevobj);
    UNREFERENCED_PARAMETER(pColorTable);
    UNREFERENCED_PARAMETER(dwCallbackID);
    UNREFERENCED_PARAMETER(pIPParams);

    WORD bitCount = 1;
    DWORD stride = (((pBitmapInfoHeader->biWidth * bitCount) + 31) & ~31) >> 3;
    DWORD biSizeImage = stride * pBitmapInfoHeader->biHeight;

    // This is the issue - it is what I am trying:
    *ppbResult = (PBYTE)LocalAlloc(LPTR, biSizeImage * sizeof(BYTE));
    CopyMemory((*ppbResult), (pSrcBitmap), biSizeImage * sizeof(BYTE));

    // To check for debug, create and save a bitmap file using the data and the given header
    createBMPFile(pSrcBitmap, *pBitmapInfoHeader);   // this works
    reateBMPFile(*ppbResult, *pBitmapInfoHeader);    // this doesn't work, error writing data

    return S_OK;
}

很抱歉没有给出完整的最小功能示例-这是unidrv渲染插件的一部分。

任务应该非常简单:将一个PBYTE复制到另一个PBYTE中。
我分配空间,然后复制。
我通过制作调试映像并将其保存到磁盘来进行验证-原始的PBYTE创建了良好的映像,复制的映像创建了无法打开的文件,并且文件太小。 (此外,考虑到这是一个打印插件-打印内容为空)。

    *ppbResult = (PBYTE)LocalAlloc(LPTR, biSizeImage * sizeof(BYTE));
    CopyMemory((*ppbResult), (pSrcBitmap), biSizeImage * sizeof(BYTE));

数据类型正确吗?我怎么了?

0 个答案:

没有答案