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

[fstream] odczytywanie i zapisywanie bitmapy

Ostatnio zmodyfikowano 2012-07-27 16:53
Autor Wiadomość
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:
C/C++
#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
P-61240
ison
» 2012-07-27 15:50:33
C/C++
ofs.write(( char * ) szer, 4 );
ofs.write(( char * ) wys, 4 );
dlaczego 4? dlaczego rzutujesz unsigned char na wskaźnik?
jak już to
C/C++
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?
P-61248
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 ;/
P-61250
pekfos
» 2012-07-27 16:51:04
Można wczytać inta.
P-61254
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ść

C/C++
sf::Int32 width, height;
...
ofs.write(( char * ) & width, 4 );
ofs.write(( char * ) & height, 4 );
P-61255
« 1 »
  Strona 1 z 1