[ create a new paste ] login | about

Link: http://codepad.org/5S4m32yy    [ raw code | fork ]

C, pasted on Nov 20:
// pastel.c

#include <stdio.h>
#include <stdlib.h>
#include "io_bmp.h"

void to_pastel_PIXEL(struct PIXEL* p)
{
	const double o=1.2;
	const double q=0.5;
	const double s=0.2;
	
	double r = p->r;	r /= 255;
	double g = p->g;	g /= 255;
	double b = p->b;	b /= 255;

	double* u = (r>g) ? ((r>b) ? &r : &b) : ((g>b) ? &g : &b);
	double* d = (r<g) ? ((r<b) ? &r : &b) : ((g<b) ? &g : &b);
	
	double _u = *u;
	double _d = *d;
	r += (1 - _u) * ((_u - _d + s) * o);
	g += (1 - _u) * ((_u - _d + s) * o);
	b += (1 - _u) * ((_u - _d + s) * o);
	
	_u = *u;
	_d = *d;
	r += (_u - r) * ((_u - _d + s) * q);
	g += (_u - g) * ((_u - _d + s) * q);
	b += (_u - b) * ((_u - _d + s) * q);
	
	p->r = (r>=1) ? 255 : r * 255;
	p->g = (g>=1) ? 255 : g * 255;
	p->b = (b>=1) ? 255 : b * 255;
}

void main(int argc,char** argv)
{
	struct BMP* a = (struct BMP*)malloc(sizeof(struct BMP));
	
	read_BMP(a, argv[1]);
	
	struct PIXEL* p = a->p;
	int i = a->w * a->h; while (i-- > 0) {
		to_pastel_PIXEL(p++);
	}
	
	write_BMP(a, "a.bmp");
}


Create a new paste based on this one


Comments: