Я пытаюсь скопировать данные изображения внутри вызова плагина.
В определенной ситуации, из следующего вызова, я должен скопировать источник (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));
Верны ли типы данных? В чем моя ошибка?
Задача ещё не решена.
Других решений пока нет …