aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/jpg/rgbrgbv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/jpg/rgbrgbv.c')
-rw-r--r--src/cmd/jpg/rgbrgbv.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/cmd/jpg/rgbrgbv.c b/src/cmd/jpg/rgbrgbv.c
new file mode 100644
index 00000000..bc55947a
--- /dev/null
+++ b/src/cmd/jpg/rgbrgbv.c
@@ -0,0 +1,69 @@
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+
+/*
+ * This version of closest() is now (feb 20, 2001) installed as rgb2cmap in libdraw
+ */
+
+int
+closest(int cr, int cg, int cb)
+{
+ int i, r, g, b, sq;
+ ulong rgb;
+ int best, bestsq;
+
+ best = 0;
+ bestsq = 0x7FFFFFFF;
+ for(i=0; i<256; i++){
+ rgb = cmap2rgb(i);
+ r = (rgb>>16) & 0xFF;
+ g = (rgb>>8) & 0xFF;
+ b = (rgb>>0) & 0xFF;
+ sq = (r-cr)*(r-cr)+(g-cg)*(g-cg)+(b-cb)*(b-cb);
+ if(sq < bestsq){
+ bestsq = sq;
+ best = i;
+ }
+ }
+ return best;
+}
+
+void
+main(int argc, char *argv[])
+{
+ int i, rgb;
+ int r, g, b;
+ uchar close[16*16*16];
+
+ /* rgbmap */
+ print("uint rgbmap[256] = {\n");
+ for(i=0; i<256; i++){
+ if(i%8 == 0)
+ print("\t");
+ rgb = cmap2rgb(i);
+ r = (rgb>>16) & 0xFF;
+ g = (rgb>>8) & 0xFF;
+ b = (rgb>>0) & 0xFF;
+ print("0x%.6ulX, ", (r<<16) | (g<<8) | b);
+ if(i%8 == 7)
+ print("\n");
+ }
+ print("};\n\n");
+
+ /* closestrgb */
+ print("uchar closestrgb[16*16*16] = {\n");
+ for(r=0; r<256; r+=16)
+ for(g=0; g<256; g+=16)
+ for(b=0; b<256; b+=16)
+ close[(b/16)+16*((g/16)+16*(r/16))] = closest(r+8, g+8, b+8);
+ for(i=0; i<16*16*16; i++){
+ if(i%16 == 0)
+ print("\t");
+ print("%d,", close[i]);
+ if(i%16 == 15)
+ print("\n");
+ }
+ print("};\n\n");
+ exits(nil);
+}