Wczytywanie obrazu BMP.
Ostatnio zmodyfikowano 2014-01-06 17:04
| 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.  #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 );
 
 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;
 
 
 Output << pixel[ 0 ] << pixel[ 1 ] << pixel[ 2 ];
 
 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. | 
|  | 
| pekfos | » 2014-01-06 17:04:04 Odczytuj i zapisuj dane binarnie. | 
|  | 
| « 1 » |