Guest User

Untitled

a guest
Aug 17th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.33 KB | None | 0 0
  1.     public void sprite_posterize(int i) {
  2.         int len = sprite_width[i] * sprite_height[i];
  3.         int pixels[] = sprite_pixels[i];
  4.         int rgb332_idx[] = new int[32768];
  5.         for (int ptr = 0; ptr < len; ptr++) {
  6.             int l = pixels[ptr];
  7.             rgb332_idx[((l & 0xf80000) >> 9) + ((l & 0xf800) >> 6) + ((l & 0xf8) >> 3)]++;
  8.         }
  9.  
  10.         int palette[] = new int[256];
  11.         palette[0] = 0xff00ff;
  12.         int freq[] = new int[256];
  13.         for (int col = 0; col < 32768; col++) {
  14.             int use = rgb332_idx[col];
  15.             if (use > freq[255]) {
  16.                 for (int k1 = 1; k1 < 256; k1++) {
  17.                     if (use <= freq[k1])
  18.                         continue;
  19.                     for (int i2 = 255; i2 > k1; i2--) {
  20.                         palette[i2] = palette[i2 - 1];
  21.                         freq[i2] = freq[i2 - 1];
  22.                     }
  23.  
  24.                     palette[k1] = ((col & 0x7c00) << 9) + ((col & 0x3e0) << 6) + ((col & 0x1f) << 3) + 0x40404;
  25.                     freq[k1] = use;
  26.                     break;
  27.                 }
  28.  
  29.             }
  30.             rgb332_idx[col] = -1;
  31.         }
  32.  
  33.         byte raster[] = new byte[len];
  34.         for (int l1 = 0; l1 < len; l1++) {
  35.             int pix = pixels[l1];
  36.             int pix332 = ((pix & 0xf80000) >> 9) + ((pix & 0xf800) >> 6) + ((pix & 0xf8) >> 3);
  37.             int new_pix = rgb332_idx[pix332];
  38.             if (new_pix == -1) {
  39.                 int min_dist = 0x3b9ac9ff;
  40.                 int r = pix >> 16 & 0xff;
  41.                 int g = pix >> 8 & 0xff;
  42.                 int b = pix & 0xff;
  43.                 for (int ptr = 0; ptr < 256; ptr++) {
  44.                     int _pix = palette[ptr];
  45.                     int _r = _pix >> 16 & 0xff;
  46.                     int _g = _pix >> 8 & 0xff;
  47.                     int _b = _pix & 0xff;
  48.                     int dist = (r - _r) * (r - _r) + (g - _g) * (g - _g) + (b - _b) * (b - _b);
  49.                     if (dist < min_dist) {
  50.                         min_dist = dist;
  51.                         new_pix = ptr;
  52.                     }
  53.                 }
  54.  
  55.                 rgb332_idx[pix332] = new_pix;
  56.             }
  57.             raster[l1] = (byte) new_pix;
  58.         }
  59.  
  60.         sprite_raster[i] = raster;
  61.         sprite_palette[i] = palette;
  62.         sprite_pixels[i] = null;
  63.     }
Add Comment
Please, Sign In to add comment