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

Wczytywanie obrazu BMP.

Ostatnio zmodyfikowano 2014-01-06 17:04
Autor Wiadomość
Timir
Temat założony przez niniejszego użytkownika
Wczytywanie obrazu BMP.
» 2014-01-06 12:36:23
Witam. Otóż muszę wczytać plik .bmp bez zapisywania całego obrazu w tablicy oraz wyzerować podane przez użytkownika natężenia kolorów zapisując wynik w nowym pliku. Problem mój niestety pojawia się już podczas wczytywania pikseli. Pierwsze kilkanaście bajtów wczytuje się bez problemu, lecz w pewnym momencie program "gubi się" nie pobierając nowych danych z pliku.

C/C++
#include <fstream>
#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
    char name[ 10 ], name2[ 10 ];
    unsigned char obraz[ 54 ], temp, bfType1, bfType2;
    short B, G, R;
    unsigned int k = 0, bfSize, bfOffBits, biWidth, biHeight;
   
    cout << "Z jakiego pliku mam wczytac dane?: ";
    cin >> name;
    cout << "\nDo jakiego pliku mam zapisac wynik programu?: ";
    cin >> name2;
   
    ifstream Input( name );
    ofstream Output( name2 );
    if( !Input )
    {
        cout << "\n\nNie mozna wczytac pliku.";
        cin.ignore();
        getchar();
        return 1;
    }
   
    cout << "\nJakie natezenia kolorow mam wyzerowac?";
    cin >> R >> G >> B;
   
    for( int i = 0; i < 54; i++ )
    {
        Input >> obraz[ i ];
        Output << obraz[ i ];
    }
   
    bfSize = obraz[ 2 ] | obraz[ 3 ] << 8 | obraz[ 4 ] << 16 | obraz[ 5 ] << 24;
    bfOffBits = obraz[ 10 ] | obraz[ 11 ] << 8 | obraz[ 12 ] << 16 | obraz[ 13 ] << 24;
    biWidth = obraz[ 18 ] | obraz[ 19 ] << 8 | obraz[ 20 ] << 16 | obraz[ 21 ] << 24;
    biHeight = obraz[ 22 ] | obraz[ 23 ] << 8 | obraz[ 24 ] << 16 | obraz[ 25 ] << 24;
   
    while( k < biWidth * biHeight )
    {
        char pixel[ 3 ];
        Input.seekg( bfOffBits + k );
        //cout << endl << Input.tellg() << endl;       //Miejsce w pliku, z ktorego jest aktualnie pobierany pixel.
        Input.read( pixel, 3 );
       
        if(( int ) pixel[ 0 ] == B )
             pixel[ 0 ] =( char ) 0;
       
        if(( int ) pixel[ 1 ] == G )
             pixel[ 1 ] =( char ) 0;
       
        if(( int ) pixel[ 2 ] == R )
             pixel[ 2 ] =( char ) 0;
       
        //cout << pixel[0] <<"   "<< pixel[1] <<"   "<< pixel[2] << endl;  //Skladowe kolorow.
        Output << pixel[ 0 ] << pixel[ 1 ] << pixel[ 2 ];
        //getch();
        k += 3;
    }
   
    while( !Input.eof() )
    {
        Input.seekg( k );
        Input >> temp;
        Output << temp;
        k++;
    }
   
    Input.close();
    Output.close();
    cout << "Program konczy dzialanie. ";
    cin.ignore();
    getchar();
    return 0;
}

A tutaj adres do przykładowego zdjęcia: http://ifotos.pl/zobacz/picbmp_eprhphh.bmp/
Z góry dziękuję za każdą pomoc.
P-101358
pekfos
» 2014-01-06 17:04:04
Odczytuj i zapisuj dane binarnie.
P-101449
« 1 »
  Strona 1 z 1