---
name: "IMG_LoadTyped_IO"
section: "3"
platform: "linux"
package: "libsdl3-image-doc"
version: "3.2.4+ds-1+deb13u1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/IMG_LoadTyped_IO"
---

# IMG\_LoadTyped\_IO(3)

Load an image from an SDL data source into a software surface.

## NAME

IMG\_LoadTyped\_IO - Load an image from an SDL data source into a software surface.

## HEADER FILE

Defined in SDL3\_image/SDL\_image.h

## SYNOPSIS

```
#include "SDL3_image/SDL_image.h"
```

**SDL\_Surface \* IMG\_LoadTyped\_IO(SDL\_IOStream \*src, bool closeio, const char \*type);**

## DESCRIPTION

An SDL\_Surface is a buffer of pixels in memory accessible by the CPU. Use this if you plan to hand the data to something else or manipulate it further in code.

There are no guarantees about what format the new SDL\_Surface data will be; in many cases, SDL\_image will attempt to supply a surface that exactly matches the provided image, but in others it might have to convert (either because the image is in a format that SDL doesn't directly support or because it's compressed data that could reasonably uncompress to various formats and SDL\_image had to pick one). You can inspect an SDL\_Surface for its specifics, and use SDL\_ConvertSurface to then migrate to any supported format.

If the image format supports a transparent pixel, SDL will set the colorkey for the surface. You can enable RLE acceleration on the surface afterwards by calling: SDL\_SetSurfaceColorKey(image, SDL\_RLEACCEL, image-\>format-\>colorkey);

If **closeio** is true, **src** will be closed before returning, whether this function succeeds or not. SDL\_image reads everything it needs from **src** during this call in any case.

Even though this function accepts a file type, SDL\_image may still try other decoders that are capable of detecting file type from the contents of the image data, but may rely on the caller-provided type string for formats that it cannot autodetect. If **type** is NULL, SDL\_image will rely solely on its ability to guess the format.

There is a separate function to read files from disk without having to deal with SDL\_IOStream: **IMG\_Load("filename.jpg")** will call this function and manage those details for you, determining the file type from the filename's extension.

There is also  **IMG\_Load\_IO** (), which is equivalent to this function except that it will rely on SDL\_image to determine what type of data it is loading, much like passing a NULL for type.

If you are using SDL's 2D rendering API, there is an equivalent call to load images directly into an SDL\_Texture for use by the GPU without using a software surface: call  **IMG\_LoadTextureTyped\_IO** () instead.

When done with the returned surface, the app should dispose of it with a call to SDL\_DestroySurface().

## FUNCTION PARAMETERS

- *src*

  an SDL\_IOStream that data will be read from.

- *closeio*

  true to close/free the SDL\_IOStream before returning, false to leave it open.

- *type*

  a filename extension that represent this data ("BMP", "GIF", "PNG", etc).

## RETURN VALUE

Returns a new SDL surface, or NULL on error.

## AVAILABILITY

This function is available since SDL\_image 3.0.0.

## SEE ALSO

**•**(3), [**IMG\_Load**(3)](/IMG_Load/3.md), **•**(3), [**IMG\_Load\_IO**(3)](/IMG_Load_IO/3.md), **•**SDL\_DestroySurface**(3)**
