Downscaling by skipping rows and columns – any example images? I'm about to implement downscaling on a microcontroller. Source resolution is e.g. 720x576 (the 576i PAL resolution, other one possible: 480i, NTSC resolution), destination is 32x16. The goal is to have RGB LED matrix (of size 32x16) flowing with various colors, shapes, shadows, etc. – a half-abstract vs. half-meaningful effect, driven by a prepared PAL or NTSC video.

I will only be able to select every 22th pixel (720 / 36) and every 36th line (576 / 16) – the microcontroller will not be able to compute averages of groups of pixels etc. This way I will obtain 32x16 downscaled image to output to the LED matrix.

I cannot find any examples of how such downscaling will behave. Tried searching for "decimation" but no luck. Which program can I use to test this downscaling? Can I quickly code this somehow – if I would to code this, I would use libSDL1, generate set of files, but this is difficult (e.g. image loading). Maybe some snippet-solution is possible? Should I care about Nyquist frequency?
A basic nearest neighbour scale function would work like so. Here I also use 24:8 fixed point arithmetic to make it more micro friendly. 

const int originalWidth = 320, originalHeight = 240;
int targetWidth = 50, targetHeight = 50;

char *pSource = sourceBuffer; 
char *pDest = destBuffer;    // you can use RGB instead of char

int yStep = (originalWidth &lt;&lt; 8) / targetWidth;
int xStep = (originalHeight &lt;&lt; 8) / targetHeight;

for(int y = 0, sampleY = 0; y &lt; targetHeight; y++, sampleY += yStep) {
    // Point to start of scaled Y source line
    char *pSourceLine = pSource + ((sampleY &gt;&gt; 8) * originalWidth);

    // Output the line, scaling only in X (we already know scaled-Y)
    for(int x = 0, sampleX = 0; x &lt; targetWidth; x++, sampleX += xStep)
        *pDest++ = pSourceLine[sampleX &gt;&gt; 8];
}


This will also work to scale image up as well as down, it should work on any input vs output size.