A Machine Vision Engineer’s take on Fifty Shades of Grey by James Mahon
A Machine Vision Engineer’s take on Fifty Shades of Grey by James Mahon (generated by pure C source code):
And the source code:
// // // 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#include #include #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; }