класс для работы с Jpeg
здесь
библиотека ijl.dll:
здесь
преобразуй HBITMAP в DIB:
BOOL CBmpFile::LoadFromHBitmap(HBITMAP hBitmap, WORD biBitCount)
{
BITMAP bmInfo;
int nRes = GetObject(hBitmap, sizeof(bmInfo), &bmInfo);
if (nRes != sizeof(bmInfo))
return FALSE;
// prepare header
m_lpBMI = (LPBITMAPINFO) LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT,
sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 0x100);
if (m_lpBMI == NULL) return FALSE;
LPBITMAPINFOHEADER lpBMIH = &m_lpBMI->bmiHeader;
lpBMIH->biSize = sizeof(BITMAPINFOHEADER);
lpBMIH->biWidth = m_cxBmp = bmInfo.bmWidth;
lpBMIH->biHeight = m_cyBmp = bmInfo.bmHeight;
lpBMIH->biPlanes = 1;
lpBMIH->biBitCount = (biBitCount) ? biBitCount : bmInfo.bmBitsPixel;
lpBMIH->biCompression = BI_RGB;
// prepare image data
m_dwBytesPerScanLine = ((DWORD) m_cxBmp * m_lpBMI->bmiHeader.biBitCount) / 32;
if (((DWORD) m_cxBmp * m_lpBMI->bmiHeader.biBitCount) % 32)
m_dwBytesPerScanLine++;
m_dwBytesPerScanLine *= 4;
m_dwSizeBmpImage = m_dwBytesPerScanLine * m_cyBmp;
m_lpBmpImage = (LPBYTE) LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT, m_dwSizeBmpImage);
if (m_lpBmpImage == NULL)
{
LocalFree(m_lpBMI);
m_lpBMI = NULL;
return FALSE;
}
// get image data
HDC hdcScreen = CreateDC( _T("DISPLAY"), NULL, NULL, NULL );
int nLines = GetDIBits(hdcScreen, hBitmap, 0, m_cyBmp, m_lpBmpImage, m_lpBMI, DIB_RGB_COLORS);
DeleteDC(hdcScreen);
if (nLines != m_cyBmp)
{
DestroyBmpImage();
return FALSE;
}
return TRUE;
}
загони полученные данные в jpeg и передай их по сети.
затем разожми и отобрази:
HBITMAP CBmpFile::GetHBitmap()
{
if (!m_lpBMI || !m_lpBmpImage)
return NULL;
m_lpBMI->bmiHeader.biSizeImage = m_dwSizeBmpImage;
LPVOID pvBits;
HBITMAP hBitmap = NULL;
// create hbitmap from image data
HDC hdcScreen = CreateDC( _T("DISPLAY"), NULL, NULL, NULL );
hBitmap = CreateDIBSection(hdcScreen, m_lpBMI, DIB_RGB_COLORS, &pvBits, NULL, 0);
DeleteDC(hdcScreen);
if (hBitmap != NULL)
memcpy(pvBits, m_lpBmpImage, m_dwSizeBmpImage);
return hBitmap;
}