/pliant/graphic/color/control.pli
 
 1  module "/pliant/language/unsafe.pli" 
 2  module "color.pli" 
 3  module "gamut.pli" 
 4  module "/pliant/util/crypto/random.pli" 
 5   
 6   
 7  function gamut_control name seconds 
 8    arg Str name ; arg Float seconds 
 9    var Link:ColorGamut g :> color_gamut name # "nocomposed" 
 10    if g=failure 
 11      console "no " name " gamut (" g:status:message ")" eol 
 12      return 
 13    random_string 1 
 14    console "control " name eol 
 15    var DateTime startup := datetime 
 16    var Int lap := 0 ; var Int try := 0; var Int maxi := 0 
 17    while datetime:seconds-startup:seconds<seconds 
 18      part shake 
 19        try += 1 
 20        var Str pixel := random_string g:pixel_size 
 21        var Int c := pixel:characters map uInt8 0 
 22        var Int m := pixel:characters map uInt8 1 
 23        var Int y := pixel:characters map uInt8 2 
 24        var Int gr := min (min c m) y 
 25        var Int t := 192 
 26        if false 
 27          restart shake 
 28      var ColorXYZ color := g simulate pixel:characters 
 29      var Str back := repeat g:pixel_size " " 
 30      g formulate color back:characters 
 31      var Int err := 0 
 32      for (var Int i) 0 g:pixel_size-1 
 33        var Int v1 := pixel:characters map uInt8 i 
 34        var Int v2 := back:characters map uInt8 i 
 35        err := max err (abs v1-v2) 
 36      if err>maxi 
 37        maxi := err 
 38        var Str worse_pixel := pixel 
 39        var Str worse_back := back 
 40      lap += 1 
 41    console "  maximum error after " lap "/" try " laps is " (string 100*maxi/255 "fixed 1") "%" eol 
 42    if maxi>2 
 43      console " " 
 44      for (var Int i) 0 g:pixel_size-1 
 45        var Int v := worse_pixel:characters map uInt8 i 
 46        console " " (right (string v/2.55 "fixed 1") 5 " ") 
 47      console " -> " 
 48      for (var Int i) 0 g:pixel_size-1 
 49        var Int v := worse_back:characters map uInt8 i 
 50        console " " (right (string v/2.55 "fixed 1") 5 " ") 
 51      console eol 
 52   
 53  export gamut_control 
 54   
 55  constant sec 60 
 56  gamut_control "epson/2100/archival:cyan+magenta+yellow" sec 
 57  gamut_control "epson/2100/semigloss/1440:cyan+magenta+yellow" sec 
 58  # gamut_control "epson/2100/semigloss/1440:cyan+magenta" sec 
 59  # gamut_control "epson/2100/semigloss/1440:cyan+yellow" sec 
 60  # gamut_control "epson/2100/semigloss/1440:magenta+yellow" sec 
 61  # gamut_control "epson/1290/colorlife:cyan+magenta+yellow" sec