---
name: "SDL::GFX::Rotozoom"
section: "3pm"
platform: "linux"
package: "libsdl-perl"
version: "2.548-5+b1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SDL::GFX::Rotozoom"
---

# SDL::GFX::Rotozoom(3pm)

rotation and zooming functions for surfaces

## NAME

SDL::GFX::Rotozoom - rotation and zooming functions for surfaces

## CATEGORY

GFX

## CONSTANTS

The constants are exported by default. You can avoid this by doing:

```
 use SDL::GFX::Rotozoom ();
```

and access them directly:

```
 SDL::GFX::Rotozoom::SMOOTHING_OFF;
```

or by choosing the export tags below:

Export tag: ':smoothing'

```
 SMOOTHING_OFF
 SMOOTHING_ON
```

## METHODS

### surface

```
 my $new_surface = SDL::GFX::Rotozoom::surface( $surface, $angle, $zoom, $smooth );
```

With `"SDL::GFX::Rotozoom::surface"` you have the opportunity to rotate and zoom a given surface. The surface will be rotated counter clockwise (in degrees). Pass `"SMOOTHING_ON"` or `"SMOOTHING_OFF"` in order to turn it on or off.

**Note**: The new surface (with $`"zoom == 1"`) will usually be bigger than the source `$surface`.

**Note**: Note: new surface should be less than 16384 in width and height.

Example:

```
 use SDL;
 use SDL::Video;
 use SDL::Rect;
 use SDL::Surface;
 use SDL::GFX::Rotozoom;

 my $screen_width  = 640;
 my $screen_height = 480;

 SDL::init(SDL_INIT_VIDEO);

 my $screen  = SDL::Video::set_video_mode(800, 600, 32, SDL_SWSURFACE);
 my $picture = SDL::Video::load_BMP('test.bmp');

 my $rotated = SDL::GFX::Rotozoom::surface( $picture, 45, 0.8, SMOOTHING_ON );

 SDL::Video::blit_surface( $rotated, SDL::Rect->new(0, 0, $rotated->w, $rotated->h),
                           $screen,  SDL::Rect->new(0, 0, 0, 0) );

 SDL::Video::update_rect( $screen, 0, 0, 0, 0 );

 sleep(2);
```

### surface\_xy

```
 my $new_surface = SDL::GFX::Rotozoom::surface_xy( $surface, $angle, $zoom_x, $zoom_y, $smooth );
```

Same as SDL::GFX::Rotozoom::surface but you can specify the zoomlevel for x and y separately.

### surface\_size

```
 my ($new_width, $new_height) = @{ SDL::GFX::Rotozoom::surface_size( $width, $height, $angle, $zoom ) };
```

`"surface_size"` will give you the width and height of an rotating/zoom operation for the given `$width` and `$height`. Helpful for knowing the surface size before actually do the rotating/zoom operation.

### surface\_size\_xy

```
 my ($new_width, $new_height) = @{ SDL::GFX::Rotozoom::surface_size_xy( $width, $height, $angle, $zoom_x, $zoom_y ) };
```

Same as SDL::GFX::Rotozoom::surface\_size but you can specify the zoomlevel for x and y separately.

### zoom\_surface

```
 my $new_surface = SDL::GFX::Rotozoom::zoom_surface( $surface, $zoom_x, $zoom_y, $smooth );
```

Same as SDL::GFX::Rotozoom::surface\_xy except you can zoom only.

### zoom\_surface\_size

```
 my ($new_width, $new_height) = SDL::GFX::Rotozoom::zoom_surface_size( $width, $height, $zoom_x, $zoom_y );
```

Same as SDL::GFX::Rotozoom::surface\_size\_xy except you can specify zoom only.

### shrink\_surface

```
 my $new_surface = SDL::GFX::Rotozoom::shrink_surface( $surface, $factor_x, $factor_y );
```

Specialized function for shrinking a surface.

### rotate\_surface\_90\_degrees

```
 my $new_surface = SDL::GFX::Rotozoom::rotate_surface_90_degrees( $surface, $num_clockwise_turns );
```

Rotating a surface `$num_clockwise_turns`-times.

## AUTHORS

See "AUTHORS" in SDL.
