Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wgranie monochromatycznego pliku BMP do macierzy

Ostatnio zmodyfikowano 2014-09-03 17:35
Autor Wiadomość
azael
Temat założony przez niniejszego użytkownika
Wgranie monochromatycznego pliku BMP do macierzy
» 2014-09-02 20:35:24
Witajcie!

Mam problem z wgraniem pliku BMP do macierzy. Chciałbym, żeby narysowany w Paincie np kwadrat można było wgrać do tablicy z uwzględnieniem 0- białe, 1 - czarne, czyli np wynikowa tablica mogłaby wyglądać np:

0 1 1 1 1 1 1 1 1 0
0 1 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 1 0
0 1 1 1 1 1 1 1 1 0

czego mógłbym użyć dalej do rozpoznawania kształtu etc.

Szukając pomocy wczesniej w internecie znalazłem funkcję (?) o nazwie BITMAPINFO w Windows.h, jednak jej użycie dla mnie jest zagadkowe. Próbowałem także coś sam zrobić:

C/C++
void MyFunc()
{
    FILE * ImageFile;
    BITMAPINFO bmih;
   
    if(( ImageFile = fopen( "kw.bmp", "rb" ) ) == NULL )
    {
        MessageBox( NULL, "Nie moge otworzyc pliku", "Error", MB_OK );
        return;
    }
   
    int * tab[ Wym ];
    fread( & bmfh, sizeof( BITMAPFILEHEADER ), 1, ImageFile );
    fread( & bmih, sizeof( BITMAPINFO ), 1, ImageFile );
   
    for( int i = 0; i < Wym * Wym; i++ )
         fread( tab[ i ], Wym, 1, ImageFile );
   
    fclose( ImageFile );
    return 0;
}

Jednak jak domyślacie się, to nie działa :( może ktoś wspomóc? :)
P-116566
DejaVu
» 2014-09-03 13:55:44
Użyj sobie biblioteki SFML, wczytaj sf::Image i później go przetwarzaj. Zabawa w 'interpretacje' budowy pliku jest czasochłonna, a korzystając z SFML-a załatwisz sobie z automatu obsługę plików takich jak np. jpg czy png, których i tak samodzielnie byś nie był w stanie zaimplementować.
P-116575
pekfos
» 2014-09-03 14:12:31
Nie przesadzajmy ;) Jeśli chce się ograniczyć do bitmap, to może je sobie sam oprogramować, akurat format pliku jest banalny.

C/C++
int * tab[ Wym ];
C/C++
fread( tab[ i ], Wym, 1, ImageFile );
To woła o pomstę do nieba..! Niezainicjalizowane wskaźniki użyte jako bufor, zły rozmiar/typ i prawdopodobnie rozmiar tablicy nie jest wyrażeniem stałym.
P-116576
Moorfox
» 2014-09-03 17:35:55
Mówisz mu o o pisaniu "czytnika" bitmap, a on zarzuca takim zdaniem:
"w internecie znalazłem funkcję (?) o nazwie BITMAPINFO w Windows.h"
http://msdn.microsoft.com/en-us/library/windows/desktop/dd183375%28v=vs.85%29.aspx
Krótkie wyjaśnienie otwierasz bitmape w notatniku i pojawiają ci się takie znaczki opisujące bitmape między innymi znajduje się tam taki ciąg o nazwie BITMAPINFO które zawiera dokładnie te same dane co twoja "funkcja"(czyt. struktura) Chodzi o to żeby odczytać bitmape i przerzucić sobie odpowiednie rzeczy do struktury a dzięki takiemu upakowaniu danych możesz po prostu przerzucić pamięć odczytanego fragmentu bitmapinfo z pliku do twojej "funkcji"
P-116581
« 1 »
  Strona 1 z 1