Workstation Types

The layered architecture of GR and GKS allows the use of a wide variety of GUI toolkits and file formats using so-called workstations. You can select the workstation by setting the GKS_WSTYPE environment variable or by explicitly opening it using gks_openws(). These workstation types will also be used when you print the output to a file using gr_beginprint(), GR.beginprint(pathname), gr.beginprint() or mlab.savefig().

File Formats

Plugin

GKS_WSTYPE

File Type

built-in

pdf / 102

PDF

built-in

ps / 62

PS

built-in

eps / 62

EPS

videoplugin

gif / 130

GIF

videoplugin

mov / 120

MOV

videoplugin

mov / 121

HiDPI MOV

videoplugin

mp4 / 160

MP4

videoplugin

webm / 161

WEBM

videoplugin

ogg / 162

OGG

cairoplugin

bmp / 145

BMP

gsplugin

bmp / 320

BMP

aggplugin

ppm / 170

PPM

cairoplugin

jpg / jpeg / 144

JPEG

gsplugin

jpg / jpeg / 321

JPEG

aggplugin

jpg / jpeg / 172

JPEG

cairoplugin

png / 140

PNG

gsplugin

png / 322

PNG

aggplugin

png / 171

PNG

cairoplugin

tif / tiff / 146

TIFF

gsplugin

tif / tiff / 323

TIFF

figplugin

fig / 370

FIG

svgplugin

svg / 382

SVG

wmfplugin

wmf / 390

WMF

htmplugin

html / 430

HTML

pgfplugin

pgf / 314

TEX

Both the cairoplugin and the gsplugin can be used to create PNG, JPEG, BMP and TIFF files. PNG and JPEG files can be created by the aggplugin as well. If it is available, the cairoplugin will be used by default, but the environment variables GKS_USE_GS_PNG, GKS_USE_GS_JPG, GKS_USE_GS_BMP or GKS_USE_GS_TIF can be set to use the gsplugin and GKS_USE_AGG_PNG or GKS_USE_AGG_JPG can be set to use the aggplugin instead.

Configuring Video Output Options

The video files generated by the videoplugin have a default resolution of 720 x 720 pixels at 24 frames per second. You can change those values by setting the GKS_VIDEO_OPTS environment variable to one of the following values:

  • <framerate>

  • <width>x<height>

  • <width>x<height>@<framerate>

mov video files can additionally be generated in HiDPI mode if supported by ffmpeg. This doubles the internal resolution while using the given resolution for playback size in supporting video players (primarily Apple QuickTime). To enable HiDPI mode for mov videos either use the GKS_WSTYPE 121 or append @x2 to the GKS_VIDEO_OPTS, for example:

  • 1920x1080@60@x2

Integrations

Plugin

GKS_WSTYPE

Description

qtplugin

381

Qt 4

qt5plugin

381

Qt 5

qt6plugin

381

Qt 6

gtkplugin

371

GTK+

wxplugin

380

wxWidgets

glplugin

420

OpenGL

By default the Qt-plugins use Qt’s internal drawing functions. This behavior can be changed to use either cairo or agg to render the image by setting the environment variables GKS_QT_USE_CAIRO or GKS_QT_USE_AGG.

Applications

Application

Plugin

GKS_WSTYPE

Operating System

gksqt

qt5plugin

411 / gksqt

Windows / Linux / macOS

GKSTerm

quartzplugin

400 / quartz

macOS

GKS 5 (X11)

x11plugin

211 / x11

Linux / macOS

GKS 5 (Windows)

built-in

41

Windows

Special Workstation Types

No Output

To use GR without generating output, you can use workstation type 100. You will still be able to explicitly write output to a file using gr_beginprint() or similar GR functions, but there will be no implicit output to an application or file.

Memory

To write an image directly to memory as 32-bit RGBA data, you can allocate the memory and then use a specially constructed filename with the format !<width>x<height>@<pointer>.mem using hexadecimal notation for the pointer, e.g. by passing it to gr_beginprint(). Once GR has finished writing the image, e.g. after calling gr_endprint(), the memory will contain the image data.

# Allocate image memory, e.g. using numpy
import numpy as np
width, height = 1920, 1080
image = np.zeros((height, width, 4), np.uint8)
pointer = image.ctypes.data

# Draw something into the memory using gr
import gr
gr.beginprint('!{}x{}@{:x}.mem'.format(width, height, pointer))
gr.polyline([0, 1], [0, 1])
gr.endprint()

# Use the image memory, e.g. using PIL/pillow
from PIL import Image
image = Image.fromarray(image, 'RGBA')
# ...
/* Allocate image memory */
int width = 1920;
int height = 1080;
unsigned char *data = malloc(height * width * 4);

/* Draw something into the memory using GR */
double x[] = {0, 1};
double y[] = {0, 1};
char filename[32];
sprintf(filename, "!%dx%d@%p.mem", width, height, data);
gr_beginprint(filename);
gr_polyline(2, x, y);
gr_endprint();

/* Use the image memory and free it afterwards */
/* ... */
free(data);