设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1325|回复: 0
打印 上一主题 下一主题

[Java]改變Image的色調/Change hue of an Image

[复制链接]

酱油的

梦石
0
星屑
1015
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

跳转到指定楼层
1
发表于 2012-4-3 07:37:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 禾西 于 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. }
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-5 16:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表