Hello,
I have successfully captured some parts of the screen and converted to JPEG in Windows.
Here some code snippets from my project. Maybe not the best solution, but it works...
Anybody here to have some hints for OS-X ?. OS-X is a strange world for me.
elli
int mWidth = Desktop::getInstance().getDisplays().getMainDisplay().totalArea.getWidth(); int mHeight = Desktop::getInstance().getDisplays().getMainDisplay().totalArea.getHeight(); HDC hDesktopDC = GetDC(0); // Desktop DC HDC mCaptureDC = CreateCompatibleDC(hDesktopDC); HBITMAP hCaptureBitmap = CreateCompatibleBitmap(hDesktopDC, width, height); HBITMAP hBitmap = (HBITMAP) SelectObject(mCaptureDC, hCaptureBitmap); // // The BitBlt function performs a bit-block transfer of the color data corresponding // to a rectangle of pixels from the specified source device context into a // destination device context. // BitBlt( mCaptureDC, // A handle to the destination device context. 0, 0, // The x,y-coordinate, in logical units, of the upper-left corner of the destination rectangle. width, height, // The width,height in logical units, of the source and destination rectangles. hDesktopDC, // A handle to the source device context. x, y, // The x,y-coordinate, in logical units, of the upper-left corner of the source rectangle. SRCCOPY | CAPTUREBLT ); // A raster-operation code. These codes define how the color data for the source rectangle // is to be combined with the color data for the destination rectangle to achieve the final color. BITMAP bitma p; GetObject(hBitmap,sizeof(BITMAP),&bitmap); BITMAPINFOHEADER bi; ZeroMemory ((uint8*)&bi, sizeof(BITMAPINFOHEADER)); bi.biSize = sizeof(BITMAPINFOHEADER); bi.biWidth = mWidth; bi.biHeight = mHeight; bi.biPlanes = 1; bi.biBitCount = DAW_RAW_BIT_COUNT; bi.biCompression = BI_RGB; uint8 buffer[ MAX ] ; // The GetDIBits function retrieves the bits of the specified compatible bitmap and copies // them into a buffer as a DIB using the specified format. GetDIBits(hDestinationDC, // A handle to the device context hBitmap, // handle to the bitmap. This must be a compatible bitmap (DDB). 0, // The first scan line to retrieve mHeight, // The number of scan lines to retrieve buffer, // A pointer to a buffer to receive the bitmap data (BITMAPINFO *)&bi, // A pointer to a BITMAPINFO structure that specifies the desired format for the DIB data. DIB_RGB_COLORS); // he color table should consist of literal red, green, blue (RGB) value createJpeg( buffer, bi.biSizeImage); void createJpeg(uint8 * pBuffer, uint32 dwLength) { ScopedPointer<JPEGImageFormat> jpeg = new JPEGImageFormat(); if ( jpeg ) { Image image = Image (Image::RGB, mWidth,mHeight, true); Image::BitmapData imageData (image, Image::BitmapData::writeOnly); // Remember th BMP format for 24 Bit: |B|G|R| |B|G|R| .... uint8 * p = pBuffer; for (int y = mHeight; --y >= 0;) { memcpy(imageData.getLinePointer(y), p, imageData.lineStride ); p += imageData.lineStride ; } MemoryOutputStream out(dwLength); // jpeg->setQuality( ??? ); jpeg->writeImageToStream(image,out) ) } }