sdlxReadSurfacePixel function surface

SdlxColor? sdlxReadSurfacePixel(
  1. Pointer<SdlSurface> surface,
  2. SdlxPoint point
)

Retrieves a single pixel from a surface as RGBA in the sRGB colorspace.

This function prioritizes correctness over speed: it is suitable for unit tests, but is not intended for use in a game engine.

Like SDL_GetRGBA, this uses the entire 0..255 range when converting color components from pixel formats with less than 8 bits per RGB component.

\param surface the surface to read. \param x the horizontal coordinate, 0 <= x < width. \param y the vertical coordinate, 0 <= y < height. \param r a pointer filled in with the red channel, 0-255, or NULL to ignore this channel. \param g a pointer filled in with the green channel, 0-255, or NULL to ignore this channel. \param b a pointer filled in with the blue channel, 0-255, or NULL to ignore this channel. \param a a pointer filled in with the alpha channel, 0-255, or NULL to ignore this channel. \returns true on success or false on failure; call SDL_GetError() for more information.

\threadsafety This function can be called on different threads with different surfaces.

\since This function is available since SDL 3.2.0.

extern SDL_DECLSPEC bool SDLCALL SDL_ReadSurfacePixel(SDL_Surface *surface, int x, int y, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a)

See also:

Implementation

SdlxColor? sdlxReadSurfacePixel(Pointer<SdlSurface> surface, SdlxPoint point) =>
    ffi.using((arena) {
      final rPointer = arena<Uint8>();
      final gPointer = arena<Uint8>();
      final bPointer = arena<Uint8>();
      final aPointer = arena<Uint8>();

      final result = sdlReadSurfacePixel(
        surface,
        point.x,
        point.y,
        rPointer,
        gPointer,
        bPointer,
        aPointer,
      );

      if (!result) {
        return null;
      }

      return SdlxColor(
        rPointer.value,
        gPointer.value,
        bPointer.value,
        aPointer.value,
      );
    });