[fstream] odczytywanie i zapisywanie bitmapy
Ostatnio zmodyfikowano 2012-07-27 16:53
RazzorFlame Temat założony przez niniejszego użytkownika |
[fstream] odczytywanie i zapisywanie bitmapy » 2012-07-27 14:36:50 Otoz wczesniej wczytywalem piksele z zakodowanego obrazka ale nie byl on binarny. I napisalem sobie taki kodzik: #include <iostream> #include <fstream> #include <windows.h> #define OFFSET 10 #define BMP_RES 18 #include <vector>
using namespace std;
typedef unsigned char UC;
class RGBColor { public: UC B; UC G; UC R; RGBColor( UC rr, UC gg, UC bb ) { B = bb; G = gg; R = rr; } RGBColor() { B = 0; R = 0; G = 0; } } kolor;
int main( void ) { string nazwa; cout << "Podaj nazwe pliku do odczytu: "; cin >> nazwa; ifstream plik( nazwa.c_str(), ios::binary ); string nazw; cout << "Podaj nazwe pliku do zapisu: "; cin >> nazw; ofstream ofs( nazw.c_str(), ios::binary ); unsigned width = 0, height = 0; short offset = 0; unsigned char c; plik.seekg( OFFSET, ios::beg ); plik.read(( char * ) & offset, 2 ); plik.seekg( BMP_RES, ios::beg ); plik.read(( char * ) & width, 4 ); plik.read(( char * ) & height, 4 ); plik.seekg( offset, ios::beg ); int x, y; UC szer = width; UC wys = height; ofs.write(( char * ) szer, 4 ); ofs.write(( char * ) wys, 4 ); for( y = 0; y < height; y++ ) { for( x = 0; x < width; x++ ) { plik.read(( char * ) & kolor, sizeof( RGBColor ) ); cout <<( int ) kolor.R << " " <<( int ) kolor.G << " " <<( int ) kolor.B << ", "; ofs.write(( char * ) & kolor, sizeof( RGBColor ) ); } cout << endl; } plik.close(); ofs.close(); system( "PAUSE" ); return 0; }
No okej. Kompiluje sie ale po wpisaniu nazwy do ktorej ma zapisac tablice program sie Crashuje. Prosze was o pomoc bo sam nie naje rady znalesc tego bledu dlatego ze dopiero od wczoraj zajelem sie tymi plikami binarnymi. Ciężkie gów** :D |
|
ison |
» 2012-07-27 15:50:33 ofs.write(( char * ) szer, 4 ); ofs.write(( char * ) wys, 4 );
|
dlaczego 4? dlaczego rzutujesz unsigned char na wskaźnik? jak już to ofs.write(( char * ) & szer, 1 ); ofs.write(( char * ) & wys, 1 );
No i dlaczego trzymasz szerokość i wysokość w unsigned char? Obrazek nie może być większy niż 255 x 255? |
|
RazzorFlame Temat założony przez niniejszego użytkownika |
» 2012-07-27 16:01:34 ison mowilem ze jestem jeszcze w tym zielony. Jak bys ty to zrobil? W czym trzymac szerokosc i wysokosc? Z tego co wiem to nie mozna wczytac int-a ;/ |
|
pekfos |
» 2012-07-27 16:51:04 Można wczytać inta. |
|
ison |
» 2012-07-27 16:53:54 jeśli tworzysz plik .bmp to musisz trzymać się ściśle tego formatu 18 4 biWidth Szerokość obrazu w pikselach 22 4 biHeight Wysokość obrazu w pikselach
|
4 bajty na szerokość i 4 na wysokość sf::Int32 width, height; ... ofs.write(( char * ) & width, 4 ); ofs.write(( char * ) & height, 4 );
|
|
« 1 » |