Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > GetPixel перебор всего изображения


Автор: ZC1989 9.6.2012, 17:04
Народ, вопрос ерундовый... но я что то никак не могу сообразить...может где и накасячил...

надо загрузить картинку, bmp , она является картой, на ней 3 разных цвета использованы...
в общем надо пройтись по всему изображения и либо создать свою матрицу по этой карте, либо использовать изображение в дальнейшем, разницы никакой, но у меня ерунда с цветами...


этим кодом вытягиваю картинку, и она получается....
Код

//Открываем файл для чтения
    HANDLE hFile = CreateFile(getUrlTexture("col.bmp"),
                     GENERIC_READ, 
                     0,
                     NULL,
                     OPEN_EXISTING,
                     FILE_ATTRIBUTE_NORMAL,
                     NULL);

    //Считываем заголовок файла
    DWORD dwBytesRead;
    BITMAPFILEHEADER hdr;// bitmap file-header 
    ReadFile(hFile, &hdr, sizeof(BITMAPFILEHEADER), &dwBytesRead, NULL);
    UINT ImageSize = hdr.bfSize - hdr.bfOffBits;//Получаем размер изображения

    //Считываем заголовок BITMAPINFO
    PBITMAPINFOHEADER pbih;
    pbih = (PBITMAPINFOHEADER)new char[hdr.bfSize - sizeof(BITMAPFILEHEADER) - ImageSize];
    ReadFile(hFile, pbih, hdr.bfSize - sizeof(BITMAPFILEHEADER) - ImageSize, &dwBytesRead, NULL);

    //Считываем сам рисунок
    BYTE *lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, ImageSize);
    ReadFile(hFile, &lpBits, ImageSize, &dwBytesRead, NULL);

    //Пытаемся загрузить все это в битмап
    BITMAP myBMP;
    myBMP.bmBits = lpBits;
    myBMP.bmBitsPixel = pbih->biBitCount;
    myBMP.bmHeight = pbih->biHeight;
    myBMP.bmWidth = pbih->biWidth;
    myBMP.bmPlanes = pbih->biPlanes;
    myBMP.bmType = 0;
    myBMP.bmWidthBytes = (pbih->biWidth * pbih->biBitCount + 15) / 16 * 2;

    //Теперь загружаем сам битмап
    HBITMAP hbmp = CreateBitmapIndirect(&myBMP);


а вот самый простой

Код

    HDC hdc = GetDC(NULL);
    SelectObject(hdc,hbmp);

    COLORREF bigg = GetPixel(hdc,100,100);
    
    int b1 = GetBValue(bigg);


на дает верных результатов

Автор: bass 12.6.2012, 20:49
ТОчно непомню но кажеться так надо не точно......
Код

HDC hdc = GetDC(NULL);
hdc = CreateCompatibleDC(hdc);
 SelectObject(hdc,hbmp);


M
GremlinProg
пользуйтесь кнопкой Код, пожалуйста,
за многократные игнорирования замечаний выставляю предупреждение

Автор: BorisVorontsov 22.6.2012, 11:46
Вызов GetDC лишний

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)