Im пытается сделать снимок экрана, преобразовывая его в char * и отправляя его через winsocks.Bitmap to char * проблемы win32
Я использую растровые изображения, потому что это самый простой способ.
Вот что я получил до сих пор:
HDC handle_ScreenDC = GetDC(NULL);
HDC handle_MemoryDC = CreateCompatibleDC(handle_ScreenDC);
BITMAP bitmap;
int x = GetDeviceCaps(handle_ScreenDC, HORZRES);
int y = GetDeviceCaps(handle_ScreenDC, VERTRES);
HBITMAP handle_Bitmap = CreateCompatibleBitmap(handle_ScreenDC, x, y);
SelectObject(handle_MemoryDC, handle_Bitmap);
BitBlt(handle_MemoryDC, 0, 0, x, y, handle_ScreenDC, 0, 0, SRCCOPY);
GetObject(handle_Bitmap, sizeof(BITMAP), &bitmap);
BITMAPFILEHEADER bmfHeader;
BITMAPINFOHEADER bi;
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bitmap.bmWidth;
bi.biHeight = bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = 32;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
DWORD dwBmpSize = ((bitmap.bmWidth * bi.biBitCount + 5)/32) * 4 * bitmap.bmHeight;
HANDLE hDIB = GlobalAlloc(GHND, dwBmpSize);
char* bufptr = (char *) GlobalLock(hDIB);
GetDIBits(handle_ScreenDC, handle_Bitmap, 0, (UINT) bitmap.bmHeight, bufptr, (BITMAPINFO *) &bi, DIB_RGB_COLORS);
return bufptr;
Теперь я получаю правильный скриншот, если я пишу HBitmap в файл (который я не хочу делать).
Однако, когда я пытаюсь преобразовать растровое изображение в символ *, я всегда получаю следующие данные:
\x1\x1\x1ÿ\x1\x1\x1ÿ\x1\x1\x1ÿ\x1\x1\x1ÿ\x1\x1\x1ÿ\x1\x1\x1ÿ\x1\x1\x1ÿ\
Может кто-нибудь помочь мне?
Заранее спасибо.
* Как * вы пытаетесь «преобразовать» изображение? И отправить его в качестве фактического «BMP» над сокетом, в котором он нуждается *, заголовки (как структуры заголовка), так и данные. –
И какие пиксельные данные содержат ваше изображение - строка, которую вы shwoing, не является полностью невоспроизводимой - очевидно, в зависимости от того, как выглядит фактическое изображение, –
Я пытаюсь преобразовать его в эту строку: GetDIBits (handle_ScreenDC, handle_Bitmap, 0, (UINT) bitmap.bmHeight, bufptr, (BITMAPINFO *) & bi, DIB_RGB_COLORS); – Flaime