|
Serwis Edukacyjny Nauczycieli w I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy
Wałaszek |
©2026 mgr Jerzy Wałaszek
|
SDL_CreateRGBSurfaceWithFormatFrom
| SPIS TREŚCI |
Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2.
Użyj tej funkcji do przydzielania powierzchni RGB z dostarczonych danych pikseli.
SDL_Surface* SDL_CreateRGBSurfaceWithFormatFrom(void* pixels,
int width,
int height,
int depth,
int pitch,
Uint32 format)
|
| pixels | dane pikseli, z których ma zostać utworzona powierzchnia. |
| width | szerokość w pikselach powierzchni do utworzenia. |
| height | wysokość w pikselach powierzchni do utworzenia. |
| depth | głębokość koloru w bitach powierzchni do utworzenia. |
| pitch | długość wiersza pikseli w bajtach. |
| format | format pikseli powierzchni do utworzenia. |
// Ten przykład pokazuje sposób utworzenia SDL_Surface* danymi załadowanymi // z pliku graficznego przy pomocy biblioteki stb_image.h (https://github.com/nothings/stb/) int req_format = STBI_rgb_alpha; int width, height, orig_format; unsigned char* data = stbi_load("./test.png", &width, &height, &orig_format, req_format); if(data == NULL) { SDL_Log("Loading image failed: %s", stbi_failure_reason()); exit(1); } // Ustaw maski koloru formatu pikseli dla tablicy bajtów RGB(A). // Tutaj są wspierane tylko STBI_rgb (3) i STBI_rgb_alpha (4)! Uint32 rmask, gmask, bmask, amask; #if SDL_BYTEORDER == SDL_BIG_ENDIAN int shift = (req_format == STBI_rgb) ? 8 : 0; rmask = 0xff000000 >> shift; gmask = 0x00ff0000 >> shift; bmask = 0x0000ff00 >> shift; amask = 0x000000ff >> shift; #else // maszyna o porządku cienkokońcowym, np. x86 rmask = 0x000000ff; gmask = 0x0000ff00; bmask = 0x00ff0000; amask = (req_format == STBI_rgb) ? 0 : 0xff000000; #endif int depth, pitch; if (req_format == STBI_rgb) { depth = 24; pitch = 3*width; // 3 bajty na piksel * liczba pikseli na wiersz } else { // STBI_rgb_alpha (RGBA) depth = 32; pitch = 4*width; } SDL_Surface* surf = SDL_CreateRGBSurfaceFrom((void*)data, width, height, depth, pitch, rmask, gmask, bmask, amask); if (surf == NULL) { SDL_Log("Creating surface failed: %s", SDL_GetError()); stbi_image_free(data); exit(1); } // ... zrób coś użytecznego z tą powierzchnią ... // ... // jeśli jej już nie potrzebujesz, zwolnij ją ... SDL_FreeSurface(surf); // .. wraz z danymi używanymi przez tę powierzchnię! stbi_image_free(data); |
Dane pikseli nie są kopiowane oraz nie są zarządzane automatycznie. Musisz zwolnić powierzchnię przed zwolnieniem danych pikseli.
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.