forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Битмап (http://forum.boolean.name/showthread.php?t=15212)

impersonalis 01.08.2011 12:26

Битмап
 
Посоветуйте библиотеку для работы с битмапами: загрузка, сохранение, чтение пискеля, запись пискселя.

Matt Merkulov 01.08.2011 12:34

Ответ: Битмап
 
http://ru.wikipedia.org/wiki/FreeImage

Mr_F_ 01.08.2011 20:38

Ответ: Битмап
 
EasyBMP (сверхпрост в использовании + опенсоурс), DevIL (чуть помудрёнее но много фич).

Mark Castle 02.09.2011 01:08

Ответ: Битмап
 
воистину отличная библиотека - ImageStone. Работает с большим кол-вом форматов, очень одобная. а сохранение битмапа делается легко, выкладываю свою функцию, если интересно:
(говорит это о том, что работать с битмапом через не так уж сложно)
Код:

void CaptureScreen(HWND window)
{
        //Получаем прямоугольную область экрана
        RECT windowRect;
        GetWindowRect(window, &windowRect);

        //Размеры битмэпа
        int bitmap_dx = windowRect.right-windowRect.left;
        int bitmap_dy = windowRect.bottom-windowRect.top;

        BITMAPINFOHEADER bmpInfoHeader;
        BITMAPFILEHEADER bmpFileHeader;
        BITMAP* pBitmap;

        bmpFileHeader.bfType = 0x4d42;
        bmpFileHeader.bfSize = 0;
        bmpFileHeader.bfReserved1 = 0;
        bmpFileHeader.bfReserved2 = 0;
        bmpFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

        bmpInfoHeader.biSize = sizeof(bmpInfoHeader);
        bmpInfoHeader.biWidth = bitmap_dx;
        bmpInfoHeader.biHeight = bitmap_dy;
        bmpInfoHeader.biPlanes = 1;
        bmpInfoHeader.biBitCount = 24;
        bmpInfoHeader.biCompression = BI_RGB;
        bmpInfoHeader.biSizeImage = bitmap_dx*bitmap_dy*(24/8);
        bmpInfoHeader.biXPelsPerMeter = 0;
        bmpInfoHeader.biYPelsPerMeter = 0;
        bmpInfoHeader.biClrUsed = 0;
        bmpInfoHeader.biClrImportant = 0;

        BITMAPINFO info;
        info.bmiHeader = bmpInfoHeader;

        BYTE* memory;
        HDC winDC = GetWindowDC(window);
        HDC bmpDC = CreateCompatibleDC(winDC);
        //Создаем битмэп
        HBITMAP bitmap = CreateDIBSection(winDC, &info, DIB_RGB_COLORS, (void**)&memory, NULL, 0);
        SelectObject(bmpDC, bitmap);//Выбираем в контекст битмэп
        BitBlt(bmpDC, 0, 0, bitmap_dx, bitmap_dy, winDC, 0, 0, SRCCOPY);
        ReleaseDC(window, winDC);

        HANDLE hFile = CreateFile(buffer,GENERIC_WRITE,0,NULL,
                OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
        if (hFile == INVALID_HANDLE_VALUE)
                return;
        DWORD dwWritten = 0;
        WriteFile(hFile, &bmpFileHeader, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
        WriteFile(hFile, &bmpInfoHeader, sizeof(BITMAPINFOHEADER), &dwWritten, NULL);
        WriteFile(hFile, memory, bmpInfoHeader.biSizeImage, &dwWritten, NULL);
        CloseHandle(hFile);
}


Mark Castle 02.09.2011 01:09

Ответ: Битмап
 
Вложений: 1
Цитата:

Сообщение от impersonalis (Сообщение 197479)
Посоветуйте библиотеку для работы с битмапами: загрузка, сохранение, чтение пискеля, запись пискселя.

Вот, держи.

moka 02.09.2011 18:44

Ответ: Битмап
 
Цитата:

а сохранение битмапа делается легко
Эмм.. Легко это так:
SaveImage(image,"c:/image.jpg",JPG);


Часовой пояс GMT +4, время: 09:23.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot