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

[SFML] Odczytywanie i wyswietlanie tablicy pikseli (cos typu bitmapy) - pomoc w wyszukiwaniu bledu

Ostatnio zmodyfikowano 2012-07-25 12:56
Autor Wiadomość
RazzorFlame
Temat założony przez niniejszego użytkownika
[SFML] Odczytywanie i wyswietlanie tablicy pikseli (cos typu bitmapy) - pomoc w wyszukiwaniu bledu
» 2012-07-25 08:42:44
Otóż juz od dawna probuje sie z tym uporac. raz nawet udalo mi sie wyswietlic taka choby bitmape... Jednak teraz mam z tym problem. Program sie zawiesza i wyskakuje komunikat ze Program ten i ten przestal dzialac. Chcialbym abyscie przeanalizowali moj kod i jezeli to mozliwe to podali co jest zle a ja to poprawie. Sam tez nie szczędze czasu na przeszukiwaniu kodu.
Tutaj main.cpp
C/C++
#include "classes.h"

int main()
{
    sf::RenderWindow app( sf::VideoMode( 800, 600, 32 ), "Odczytywanie...", sf::Style::Close );
    sf::Event ev;
    sf::Image img( 800, 600, sf::Color( 255, 0, 0 ) );
    sf::Sprite bufor;
    img.SetSmooth( false );
    bufor.SetImage( img );
   
    MyBMP bmp1( "bmp1.sss", 80, 80, 5, 5, 0, 0 );
   
    while( app.IsOpened() )
    {
        while( app.GetEvent( ev ) )
        {
            if( ev.Type == sf::Event::Closed ) app.Close();
           
        }
        app.Clear( sf::Color( 255, 0, 0 ) );
        ClearIMG( img, sf::Color( 255, 0, 0 ), 800, 600 );
        app.Draw( bufor );
       
        app.Display();
    }
   
    return 0;
}
Tutaj classes.h
C/C++
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/System.hpp>
#include <vector>
#include <fstream>
#include <iostream>
#include <stdlib.h>

using namespace std;

class MyRGB
{
public:
    int r;
    int g;
    int b;
   
    MyRGB( int rr, int gg, int bb );
    void SetRGB( int rr, int gg, int bb );
    MyRGB GetRGB();
};

class MyBMP
{
public:
    int x;
    int y;
    int w;
    int h;
    int bx;
    int by;
    int iw;
    int ih;
    MyBMP();
    MyBMP( char * filename, int xx, int yy, int ww, int hh, int bxx, int byy );
    vector < vector < MyRGB > > pixels;
    void LoadBMP( char * filename );
    void BlitOn( sf::Image & spr );
};

void ClearIMG( sf::Image & img, sf::Color col, int w, int h );
Tutaj classes.cpp
C/C++
#include "classes.h"

MyRGB::MyRGB( int rr, int gg, int bb )
{
    SetRGB( rr, gg, bb );
}
void MyRGB::SetRGB( int rr, int gg, int bb )
{
    r = rr;
    g = gg;
    b = bb;
}
MyRGB MyRGB::GetRGB()
{
    MyRGB color( r, g, b );
    return color;
}

MyBMP::MyBMP()
{
    x = 0;
    y = 0;
    w = 0;
    h = 0;
    bx = 0;
    by = 0;
    iw = 0;
    ih = 0;
}
MyBMP::MyBMP( char * filename, int xx, int yy, int ww, int hh, int bxx, int byy )
{
    x = xx;
    y = yy;
    w = ww;
    h = hh;
    bx = bxx;
    by = byy;
    LoadBMP( filename );
}
void MyBMP::LoadBMP( char * filename )
{
    string tonl;
    ifstream plik( filename );
    plik >> iw >> ih;
    getline( plik, tonl );
    char gr[ 3 ];
    char gg[ 3 ];
    char gb[ 3 ];
    for( int mx = 0; mx < ih; mx++ )
    {
        for( int my = 0; my < iw; my++ )
        {
           
            plik >> gr[ 0 ] >> gr[ 1 ] >> gr[ 2 ];
            plik >> gg[ 0 ] >> gg[ 1 ] >> gg[ 2 ];
            plik >> gb[ 0 ] >> gb[ 1 ] >> gb[ 2 ];
            pixels[ mx ].push_back( MyRGB( atoi( gr ), atoi( gg ), atoi( gb ) ) );
        }
    }
}

void MyBMP::BlitOn( sf::Image & spr )
{
    int px = bx, py = by;
    for( int mx = x; mx < x + w; mx++ )
    {
        for( int my = y; my < y + h; my++ )
        {
            spr.SetPixel( mx, my, sf::Color( pixels[ px ][ py ].r, pixels[ px ][ py ].g, pixels[ px ][ py ].b ) );
        }
        px++;
        py = by;
    }
}

void ClearIMG( sf::Image & img, sf::Color col, int w, int h )
{
    for( int x = 0; x < w; x++ )
    {
        for( int y = 0; y < h; y++ )
        {
            img.SetPixel( x, y, col );
        }
    }
}

A oto plik bmp1.sss:

5 5
000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000

Edit:
Jeszcze nawet go nie wyswietlam a juz wyskakuje blad :<

Edit x2:
Nosz k***a juz chyba wiem o co chodzi ale jeszcze zostawiam temat bo nie wiem czy zadziala.

Edit x3:
Ahh nie wiem jak dodac do wektora to cos. Nie wiem jak to ujac. Moze zobaczycie co napisalem ale sie nie kompiluje i nie wiem o co cho:
pixels.push_back( vector < MyRGB >( 0, 0, 0 ) );
P-61068
mati1qazxsw2
» 2012-07-25 12:56:37

vector < MyRGB > e;
for(int i = 0;i < 3;++i)e.push_back(0);
pixels.push_back(e);
P-61089
« 1 »
  Strona 1 z 1