[SFML] Straszna predkosc i problem z zapelnianiem obrazka
Ostatnio zmodyfikowano 2012-07-26 18:09
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 |
|
m4tx |
» 2012-07-26 16:40:14 |
|
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 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 |
|
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
|
|
ison |
» 2012-07-26 17:10:29 jak skonwertować to (vector tych pikseli) na tablice pikseli Uint8
|
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 |
|
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 |
|
DejaVu |
» 2012-07-26 18:09:18 Skoro problem rozwiązany to temat zamykam. |
|
1 « 2 » |