The following is a simple-minded dithering used in Tara to choose the nearest color from a set of 64 predefined color palette.

NB. for biff8 RGB values
RGB=: 3 : 0"1
(0{y.) (23 b.) 8 (33 b.) (1{y.) (23 b.) 8 (33 b.) (2{y.)
)

RGBtuple=: 3 : 0"0
(16bff (17 b.) y.), (_8 (33 b.) 16bff00 (17 b.) y.), (_16 (33 b.) 16bff0000 (17 b.) y.)
)

NB. match color (red, green, blue) to internal color palette table
NB. return color index
rgbcolor=: 3 : 0
(i. <./) +/"1 | y. -"1 RGBtuple colorset
)

NB. predefine    black white red green blue yellow magenta cyan
colorset=: 0 16bffffff 16bff 16bff00 16bff0000 16bffff 16bff00ff 16bffff00
NB. Sets extra colour palette to the Excel 97+ default.
colorset=: colorset, RGB 16b00 16b00 16b00  NB. 8
colorset=: colorset, RGB 16bff 16bff 16bff  NB. 9
colorset=: colorset, RGB 16bff 16b00 16b00  NB. 10
colorset=: colorset, RGB 16b00 16bff 16b00  NB. 11
colorset=: colorset, RGB 16b00 16b00 16bff  NB. 12
colorset=: colorset, RGB 16bff 16bff 16b00  NB. 13
colorset=: colorset, RGB 16bff 16b00 16bff  NB. 14
colorset=: colorset, RGB 16b00 16bff 16bff  NB. 15
colorset=: colorset, RGB 16b80 16b00 16b00  NB. 16
colorset=: colorset, RGB 16b00 16b80 16b00  NB. 17
colorset=: colorset, RGB 16b00 16b00 16b80  NB. 18
colorset=: colorset, RGB 16b80 16b80 16b00  NB. 19
colorset=: colorset, RGB 16b80 16b00 16b80  NB. 20
colorset=: colorset, RGB 16b00 16b80 16b80  NB. 21
colorset=: colorset, RGB 16bc0 16bc0 16bc0  NB. 22
colorset=: colorset, RGB 16b80 16b80 16b80  NB. 23
colorset=: colorset, RGB 16b99 16b99 16bff  NB. 24
colorset=: colorset, RGB 16b99 16b33 16b66  NB. 25
colorset=: colorset, RGB 16bff 16bff 16bcc  NB. 26
colorset=: colorset, RGB 16bcc 16bff 16bff  NB. 27
colorset=: colorset, RGB 16b66 16b00 16b66  NB. 28
colorset=: colorset, RGB 16bff 16b80 16b80  NB. 29
colorset=: colorset, RGB 16b00 16b66 16bcc  NB. 30
colorset=: colorset, RGB 16bcc 16bcc 16bff  NB. 31
colorset=: colorset, RGB 16b00 16b00 16b80  NB. 32
colorset=: colorset, RGB 16bff 16b00 16bff  NB. 33
colorset=: colorset, RGB 16bff 16bff 16b00  NB. 34
colorset=: colorset, RGB 16b00 16bff 16bff  NB. 35
colorset=: colorset, RGB 16b80 16b00 16b80  NB. 36
colorset=: colorset, RGB 16b80 16b00 16b00  NB. 37
colorset=: colorset, RGB 16b00 16b80 16b80  NB. 38
colorset=: colorset, RGB 16b00 16b00 16bff  NB. 39
colorset=: colorset, RGB 16b00 16bcc 16bff  NB. 40
colorset=: colorset, RGB 16bcc 16bff 16bff  NB. 41
colorset=: colorset, RGB 16bcc 16bff 16bcc  NB. 42
colorset=: colorset, RGB 16bff 16bff 16b99  NB. 43
colorset=: colorset, RGB 16b99 16bcc 16bff  NB. 44
colorset=: colorset, RGB 16bff 16b99 16bcc  NB. 45
colorset=: colorset, RGB 16bcc 16b99 16bff  NB. 46
colorset=: colorset, RGB 16bff 16bcc 16b99  NB. 47
colorset=: colorset, RGB 16b33 16b66 16bff  NB. 48
colorset=: colorset, RGB 16b33 16bcc 16bcc  NB. 49
colorset=: colorset, RGB 16b99 16bcc 16b00  NB. 50
colorset=: colorset, RGB 16bff 16bcc 16b00  NB. 51
colorset=: colorset, RGB 16bff 16b99 16b00  NB. 52
colorset=: colorset, RGB 16bff 16b66 16b00  NB. 53
colorset=: colorset, RGB 16b66 16b66 16b99  NB. 54
colorset=: colorset, RGB 16b96 16b96 16b96  NB. 55
colorset=: colorset, RGB 16b00 16b33 16b66  NB. 56
colorset=: colorset, RGB 16b33 16b99 16b66  NB. 57
colorset=: colorset, RGB 16b00 16b33 16b00  NB. 58
colorset=: colorset, RGB 16b33 16b33 16b00  NB. 59
colorset=: colorset, RGB 16b99 16b33 16b00  NB. 60
colorset=: colorset, RGB 16b99 16b33 16b66  NB. 61
colorset=: colorset, RGB 16b33 16b33 16b99  NB. 62
colorset=: colorset, RGB 16b33 16b33 16b33  NB. 63

For example

   rgbcolor 0 0 255
4
   rgbcolor 200 100 50
53

so it return an index of palette, but for some color

   rgbcolor 220 220 220
31
   RGBtuple 31{colorset
204 204 255

The problem is that original color is grey (no chroma), but
it choose a purple color indicating the choice is unwise.

Any better algorithm suggestion?
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to