Передача Bitmap между процессами?

111
05 октября 2019, 01:50

У меня есть два процесса Client и Server, один из них генерирует Bitmap мне нужно его передать другому процессу. Я создал между ними FileMapping

Первый процесс Server

HANDLE hFileMapping = CreateFileMapping(nullptr, nullptr, PAGE_READWRITE, 0, sizeof(Preview), "Local\\shared-memory");
if (!hFileMapping) printf("CreateFileMapping: Error %ld\n", GetLastError());
LPVOID lpFileMap = MapViewOfFile(hFileMapping, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
if (!lpFileMap) printf("MapViewOfFile: Error %ld\n", GetLastError());

Второй процесс Client

HANDLE hFileMapping = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE, FALSE, "Local\\shared-memory");
LPVOID lpFileMap = MapViewOfFile(hFileMapping, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);

Во втором процессе (Client) получаю скриншот рабочего стола

HDC desktopHdc = GetDC(NULL);
HDC memHdc = CreateCompatibleDC(desktopHdc);
HBITMAP bitmap;
BITMAPINFO bmi;
ZeroMemory(&bmi, sizeof(BITMAPINFO));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = 800;
bmi.bmiHeader.biHeight = 600;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
char* bmbits;
bitmap = CreateDIBSection(memHdc, &bmi, DIB_RGB_COLORS, (void**)&bmbits, hFileMapping, 0);
//Как мне праивльно записать изображение в секцию здесь?
GetBitmapBits(bitmap, 800 * 600 * 3, bmbits);

В первом процессе (Server) пытаюсь его получить но получаю чёрный экран.

HDC windowHdc = GetDC(NULL);
HDC memHdc = CreateCompatibleDC(windowHdc);
HBITMAP restore;
BITMAPINFO bmi;
ZeroMemory(&bmi, sizeof(BITMAPINFO));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = 800;
bmi.bmiHeader.biHeight = 600;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
char* buffer;
HBITMAP bitmap = CreateDIBSection(windowHdc, &bmi, DIB_RGB_COLORS, (void**)&buffer, hFileMapping, 0);
//Как мне праивльно получить изображение из секции здесь?
SetBitmapBits(bitmap, 800 * 600 * 3, buffer);
READ ALSO
Drag & Drop в QAbstractItemModel

Drag & Drop в QAbstractItemModel

Не могу разобраться в том, как работает drag & drop в qt-ишной model-viewМне нужно реализовать перетаскивание между двумя view (QTreeView) в которых находятся...

125
Запретить редактирование JTable [закрыт]

Запретить редактирование JTable [закрыт]

Нужно запретить редактирование JTable, чтобы при нажатие на конкретную строку она только выделялась и можно было обработать слушателем это...

108
return не возвращает значение [закрыт]

return не возвращает значение [закрыт]

Не могу понять почему метод say(String something) не возвращает "Ты чё не знаешь, что рыбы не разговаривают?"

122
Кнопка назад Toolbar

Кнопка назад Toolbar

Прочел документацию, и сделал как написано AndroidManifestxml

108