我正在尝试在插件调用中复制图像的数据。
在某些情况下,必须通过以下调用将源(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));
数据类型正确吗?我怎么了?