Project1

标题: [Java]改變Image的色調/Change hue of an Image [打印本页]

作者: 禾西    时间: 2012-4-3 07:37
标题: [Java]改變Image的色調/Change hue of an Image
本帖最后由 禾西 于 2012-4-11 18:17 编辑

JAVA 代码复制
  1. BufferedImage img;
  2. public void hue_change(int hue) {
  3.         int size = img.getWidth()*img.getHeight();
  4.         int rgb[] = new int[size];
  5.         int pixel, a, r, g, b, x, max, min, delta;
  6.         float h = 0;
  7.         img.getRGB(0, 0, img.getWidth(), img.getHeight(), rgb, 0, img.getWidth());
  8.         for (int i=0;i<size;++i) {
  9.                 pixel = rgb[i];
  10.                 a = (pixel & 0xff000000);
  11.                 r = (pixel & 0xff0000  ) >> 16;
  12.                 g = (pixel & 0xff00    ) >> 8;
  13.                 b = (pixel & 0xff      );
  14.                 max = (r > g) ? r : g; max = (max > b) ? max : b;
  15.                 min = (r > g) ? g : r; min = (min > b) ? b : min;
  16.  
  17.                 delta = max - min;
  18.                 h = 0;
  19.                 if (delta == 0) continue;
  20.                 if (r == max) {
  21.                         h = (g - b)/(float)delta;
  22.                 } else if (g == max) {
  23.                         h = (b - r)/(float)delta + 2;
  24.                 } else if (b == max) {
  25.                         h = (r - g)/(float)delta + 4;
  26.                 }
  27.                 h *= 60;
  28.                 if (h < 0) h += 360;
  29.                 x = (int)h - hue;
  30.                 x %= 360; if (x < 0) x += 360;
  31.                 r = Math.abs(x-180)*delta/60-delta;
  32.                 x = (int)h - hue + 240;
  33.                 x %= 360; if (x < 0) x += 360;
  34.                 g = Math.abs(x-180)*delta/60-delta;
  35.                 x = (int)h - hue + 120;
  36.                 x %= 360; if (x < 0) x += 360;
  37.                 b = Math.abs(x-180)*delta/60-delta;
  38.                 if (r > max) r = max; if (r < min) r = min;
  39.                 if (g > max) g = max; if (g < min) g = min;
  40.                 if (b > max) b = max; if (b < min) b = min;
  41.                 pixel = a|(r<<16)|(g<<8)|b;
  42.                 rgb[i] = pixel;
  43.         }
  44.         img.setRGB(0, 0, img.getWidth(), img.getHeight(), rgb, 0, img.getWidth());
  45. }





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1