problem z odczytem "wartości" pikseli

0

Witam wszystkich!

Chcę napisać program, który wczyta bitmapę, a następnie policzy histogram występujących w niej kolorów. Oto, co jak dotąd udało mi się zrobić:

#include <iostream>
#include <fstream>
#include <windows.h>
using namespace std;

int main()
{
    int red,green,blue;
    COLORREF color;
    HDC hdc;
    
    struct info
    {
         int wysokosc;
         int szerokosc;
    }info;
    
    ifstream obraz("obrazek.bmp", ios::binary); //wczytanie pliku
    hdc = obraz;
    
    obraz.seekg(18,ios::beg); 
    obraz.read((char*)&info.szerokosc, sizeof(int)); //wczytanie wartości szerokości
    obraz.seekg(22,ios::beg);
    obraz.read((char*)&info.wysokosc, sizeof(int)); //wczytanie wartości wysokości
    
    color= GetPixel(hdc,150,170);
    blue=GetBValue(color);
    red=GetRValue(color);      
    green=GetGValue(color);
     
    cout<<"Blue: "<<blue<<", Red: "<<red<<", Green: "<<green<<"."<<endl;    
    system("pause");
    return 0;
} 

Jak łatwo można się domyśleć, linijka "color= GetPixel(hdc,150,170);" jest błędna, gdyż jest tam niedozwolona konwersja. Ww. program nie jest kompletny, na razie moim celem jest znalezienie komend, które poprawnie wczytają wartości danego piksela. Byłbym bardzo wdzięczny, gdyby ktokolwiek mógłby mi pomóc, wyjaśnić jak to zrobić dobrze lub chociaż naprowadzić na poprawne rozwiązanie. W googlach szukałem parę godzin, niestety bez większego efektu ;/

Z góry dziękuję za otrzymaną pomoc,
Pozdrawiam.


0

Jak już używasz <windows.h>, to jest gotowa funkcja do wczytywania bitmapy:


    HBITMAP bmp=( HBITMAP )LoadImage(NULL, "bmptest.bmp", IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);
    HDC hdc= CreateCompatibleDC(NULL);
    SelectObject( hdc, bmp );
    COLORREF kolor;
    
    BITMAP bmInfo;
    GetObject( bmp, sizeof( bmInfo ), & bmInfo );


    for(int t=0; t<bmInfo.bmHeight; t++)
    {
        for(int e=0; e<bmInfo.bmWidth;e++)
        {
            kolor=GetPixel(hdc, e,t);
            //GetRValue(kolor)
            //GetGValue(kolor)
            //GetBValue(kolor)
            //funkcje te pobierają odpowiednio wartość R, G, B z pixela

           ...
    }
    ReleaseDC(NULL, hdc); // tej linijki nie jestem pewny
    DeleteObject(bmp);
    
 

Sypnąłem kodem, myślę że jak będziesz chciał to na msdn doczytasz co, jak i dlaczego. Pozdro ;>

1 użytkowników online, w tym zalogowanych: 0, gości: 1