1 module rip.processing.negative;
2 
3 private
4 {
5 	import std.algorithm;
6 	import std.range;
7 	import std.stdio;
8 
9 	import rip.concepts.ranges;
10 	import rip.concepts.templates;
11 	import rip.concepts.color;
12 	import rip.concepts.surface;
13 
14 	import rip.concepts.destination;
15 }
16 
17 class Negative {
18 	RGBColor	base = new RGBColor(255, 255, 255);
19 	RGBColor 	tmp = new RGBColor(0, 0, 0);
20 
21 	RGBColor 	getNewColor(RGBColor a) {
22 		return base - a;
23 	}
24 
25 	void 		refColor(ref RGBColor a) {
26 		/*tmp.clear;
27 		tmp += a;
28 
29 		a.clear;
30 		a += base;
31 		a -= tmp;*/
32 		base -= a;
33 		a.copy(base);
34 		base.setRed(255);
35 		base.setGreen(255);
36 		base.setBlue(255);
37 	}
38 }
39 
40 /*auto toNegative(Range)(Range r, RGBColor color = new RGBColor(255, 255, 255))
41 	if(isPixelRange!Range)
42 {
43 	auto range = map!(a => color - a)(r).array;
44 	return createPixels(range);
45 }
46 
47 
48 auto toNegative(Surface surface, RGBColor color = new RGBColor(255, 255, 255))
49 {
50 	auto image = surface
51 		.createFences(1,1)
52 			.map!(a => a.front)
53 			.toNegative(color)
54 			.toSurface(surface.getWidth!int, surface.getHeight!int);
55 	return image;
56 }
57 
58 auto toNegativeNew(Range)(Range r, RGBColor color = new RGBColor(255, 255, 255))
59 	if(isPixelRange!Range)
60 {
61 	return r.map!(a => color - a);
62 }
63 
64 
65 auto toNegativeNew(Surface surface, RGBColor color = new RGBColor(255, 255, 255))
66 {
67 	auto image = surface
68 		//использовать следует только ленивую версию createFences
69 		.createFencesNew(1,1)
70 			//a.base возвращает главный пиксель, окрестность которого исследуем
71 			.map!(a => a.base)
72 			//опять же используем ленивость
73 			.toNegativeNew(color)
74 			//передаём всю поверхность целиком.
75 			//новая версия сама создаст новую из параметров старой
76 			.toSurface(surface);
77 	return image;
78 }*/