//
//
// 50Shades.cpp : Something for the weekend - JM
// I am sure that you could to this in abaout 6 lines of Python, but here it is in olde C
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define IMAGE unsigned char
void draw_grey_box ( IMAGE *vram, int x_size, int ix, int iy, int dx, int dy, IMAGE grey )
{
unsigned char *ptr;
int y;
for ( y = iy; y < iy+dy; ++y ) {
ptr = vram + ix + y * x_size;
memset ( ptr, grey, dx );
}
}
int save_any_pgm_image2 ( IMAGE *ram, char *file, char *com, int x1, int y_1, int x2, int y2, int X_SIZE )
{
int dx, y;
IMAGE *ptr;
FILE *fd;
dx = x2-x1;
if ( (fd = fopen ( file, "wb" )) == NULL ) { /* 1.29 */
printf ( "save_any_image File <%s> open failed to write\n", file );
perror ( "pgm write" );
return -1;
}
fprintf ( fd, "P5 #%s\n%d\n%d\n255\n", com, dx, y2-y_1 );
for ( y = y_1; y < y2; y++ ) { /* Write it all out from gram */
ptr = ram + x1 + y * X_SIZE;
if ( fwrite ( ptr, dx, sizeof( IMAGE ), fd ) != sizeof( IMAGE ) ) {
fclose ( fd );
return -2;
}
}
fclose ( fd );
return y;
}
int main(int argc, char* argv[])
{
int x_size = 1024, y_size = 768, i, x, y, dx, dy, nx = 10, ny = 5, ix, iy, grey = 1;
printf ( "Image fILE in c:\\temp\n" );
IMAGE *vram;
dx = x_size / ( nx+1 );
dy = y_size / ( ny+1 );
vram = (unsigned char *)malloc ( x_size * y_size );
memset ( vram, 0, x_size * y_size );
for ( y = 0; y < ny; ++y ) {
for ( x = 0; x < nx; ++x ) {
ix = x * dx + dx / 2;
iy = y * dy + dy / 2;
draw_grey_box ( vram, x_size, ix, iy, dx*9/10, dy*9/10, grey*5+3 );
++grey;
}
}
save_any_pgm_image2 ( vram, "c:\\Temp\\50_shades.pgm", "for Valentines day", 0, 0, x_size, y_size, x_size );
return 0;
}