Serwis Edukacyjny
Nauczycieli
w I-LO w Tarnowie

Do strony głównej I LO w Tarnowie

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

logo

Autor artykułu: mgr Jerzy Wałaszek

 

SDL2

Interfejs SDL2:

SDL_CreateRGBSurfaceWithFormatFrom

Rozdziały:
     Interfejs SDL2 wg nazw
     Interfejs SDL2 wg kategorii

 

Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2. Oryginał znajdziesz pod tym adresem: https://wiki.libsdl.org/CategoryAPI.

SDL_CreateRGBSurfaceWithFormatFrom

Użyj tej funkcji do przydzielania powierzchni RGB z dostarczonych danych pikseli.

Składnia

SDL_Surface* SDL_CreateRGBSurfaceWithFormatFrom(void*  pixels,
                                                int    width,
                                                int    height,
                                                int    depth,
                                                int    pitch,
                                                Uint32 format)

Parametry funkcji

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.

Wartość zwracana

Zwraca nową strukturę SDL_Surface lub NULL przy błędzie; wywołaj funkcję SDL_GetError(), aby otrzymać więcej informacji na temat błędu.

Przykładowy kod

// 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);

Uwagi

Jeśli funkcji skończy się pamięć, zwróci NULL.

Dane pikseli nie są kopiowane oraz nie są zarządzane automatycznie. Musisz zwolnić powierzchnię przed zwolnieniem danych pikseli.

Wersja

Funkcja dostępna od SDL 2.0.5.

Powiązane funkcje

 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 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: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.