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

[SFML] Straszna predkosc i problem z zapelnianiem obrazka

Ostatnio zmodyfikowano 2012-07-26 18:09
Autor Wiadomość
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2012-07-26 16:30:37
Juz troche znam strukture tego formatu. Jednak nie wiem w jaki sposob to odczytac. Zalozmy ze mam tablice pikseli typu sf::Color. I wtedy jak powinienem odczytac ja. W jaki sposob uzyc tej metody LoadFromMemory. Zeby nie bylo sam tez bede przeszukiwal dokumentacje czy cos.
teksturę powinieneś modyfikować najrzadziej jak się da
 Co masz na mysli? To znaczy co sugerujesz.

Edit:
bool sf::Image::LoadFromMemory ( const char *  Data,
std::size_t  SizeInBytes
)
O co chodzi z tym Data. To nie jest nazwa pliku??? :O Prosze wytlumaczcie mi to :P Chodzi mi w jaki sposob to mozna zrealizowac
P-61171
m4tx
» 2012-07-26 16:40:14
O co chodzi z tym Data. To nie jest nazwa pliku??? :O
http://translate.google.com/?source=osdd#en|pl|data
P-61172
ison
» 2012-07-26 16:41:37
void sf::Texture::update (const Uint8 * pixels,
unsigned int  width,
unsigned int  height,
unsigned int  x,
unsigned int  y
)

metoda przyjmuje tablicę pikseli, są to Uint8 czyli 8 bitowe zmienne, każdy piksel składa się z 4 kanałów (RGBA), zatem metoda oczekuje na podanie jej width*height*4 bajtów


więc jak chcesz zmodyfikować piksel na pozycji 0, 0

C/C++
Uint8 pixel[ 4 ];
pixel[ 0 ] = 255;
pixel[ 1 ] = 0;
pixel[ 2 ] = 0;
pixel[ 3 ] = 0;
tex.update( pixel, 1, 1, 0, 0 );
nie używałem tego nigdy ale zdaje mi się, że tak to działa ;p

prościej chyba będzie użyć setPixel na sf::Image i potem załadować teksturę z niego, tyle, że nie możesz tego robić co klatkę bo wydajność ucierpi
P-61173
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2012-07-26 16:42:07
Wiem co to Data po angielsku. Sory ze zamotalem ale chyba chodzilo mi o metode LoadFromPixels ;/ Wlasnie dlatego mowilem o Uint8. Moglibyscie mi wytlumaczyc jak uzyc tej metody majac tylko tablice (vector) pikseli?

Edit: Ison dzieki ze masz taka cierpliwosc ale mi bardziej chodzi jak skonwertować to (vector tych pikseli) na tablice pikseli Uint8

Eeee to wystarczy tylko cos tego typu zrobic: Uint8 piksele[1200] <chodzi o 20x20> i pozniej for i poprostu piksele[xx] = IMAGE.pixels[x][y].r i tak dalej? 

Edit x2:
Musialem poprawic bo napisalem

piksele[i] <-- kursywa
P-61174
ison
» 2012-07-26 17:10:29
jak skonwertować to (vector tych pikseli) na tablice pikseli Uint8

C/C++
Uint8 * pixels = new Uint8[ ilosc * 4 ];
for( int i = 0; i < ilosc; ++i ) {
    pixels[ i * 4 ] = R;
    pixels[ i * 4 + 1 ] = G;
    pixels[ i * 4 + 2 ] = B;
    pixels[ i * 4 + 3 ] = A;
}
...
delete[] pixels;

ale jeśli chcesz to robić co klatkę to i tak będzie za wolne, już lepiej jakbyś skorzystał z tego setPixel dla sf::Image
P-61176
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2012-07-26 17:42:01
Hahhahhahahahah o stary. Wreszcie. Jestem ci dozgonnie wdzieczny. DZIEKI!!!!!!!!!!!!!!!!!!!!!!!!!! Bardzo dzieki dzieki dzieki dzieki dzieki!!!!!! Bardzo! Bardzo! Bardzo! Bardzo! Mozna to ujac tak: O K**wa nie posiadam sie z radosci :D :P :> :) Yeaaaaah Yeaaaah. Yeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa. Chlopie nie wiesz jak sie ciesze :P

Ison, po co mam to robic co klatke? Chodzilo mi zeby tylko wczytac ta grafe a pozniej z nniej kozystac. Man jestes spoczko ::D

Edit:
Teraz dodalem do mojej klasy 1 obiekt typu sf::Image i 1 sf::Sprite. Pozniej wczytuje z mojego "zakodowanego obrazka" tablice pikseli, pozniej konwertuje to na Uint8 * i uzywam LoadFromPixels. Pozniej tylko ustawiam Image tego sf::Sprite'a na ten obiekt typu sf::Image i moge sobie wtedy robic z nim co chce. Stary jeszcze raz dzieki za cierpliwość i dokładne wytłumaczenie
P-61183
DejaVu
» 2012-07-26 18:09:18
Skoro problem rozwiązany to temat zamykam.
P-61189
1 « 2 »
Poprzednia strona Strona 2 z 2