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 }*/