查看: 1608|回复: 0

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

[复制链接]

酱油的

梦石
0
星屑
1840
在线时间
2161 小时
注册时间
2007-12-22
回帖
3216

贵宾

发表于 2012-4-3 07:37:33 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 禾西 于 2012-4-11 18:17 编辑

[pre lang="java"]
BufferedImage img;
public void hue_change(int hue) {
        int size = img.getWidth()*img.getHeight();
        int rgb[] = new int[size];
        int pixel, a, r, g, b, x, max, min, delta;
        float h = 0;
        img.getRGB(0, 0, img.getWidth(), img.getHeight(), rgb, 0, img.getWidth());
        for (int i=0;i<size;++i) {
                pixel = rgb;
                a = (pixel & 0xff000000);
                r = (pixel & 0xff0000  ) >> 16;
                g = (pixel & 0xff00    ) >> 8;
                b = (pixel & 0xff      );
                max = (r > g) ? r : g; max = (max > b) ? max : b;
                min = (r > g) ? g : r; min = (min > b) ? b : min;
                       
                delta = max - min;
                h = 0;
                if (delta == 0) continue;
                if (r == max) {
                        h = (g - b)/(float)delta;
                } else if (g == max) {
                        h = (b - r)/(float)delta + 2;
                } else if (b == max) {
                        h = (r - g)/(float)delta + 4;
                }
                h *= 60;
                if (h < 0) h += 360;
                x = (int)h - hue;
                x %= 360; if (x < 0) x += 360;
                r = Math.abs(x-180)*delta/60-delta;
                x = (int)h - hue + 240;
                x %= 360; if (x < 0) x += 360;
                g = Math.abs(x-180)*delta/60-delta;
                x = (int)h - hue + 120;
                x %= 360; if (x < 0) x += 360;
                b = Math.abs(x-180)*delta/60-delta;
                if (r > max) r = max; if (r < min) r = min;
                if (g > max) g = max; if (g < min) g = min;
                if (b > max) b = max; if (b < min) b = min;
                pixel = a|(r<<16)|(g<<8)|b;
                rgb = pixel;
        }
        img.setRGB(0, 0, img.getWidth(), img.getHeight(), rgb, 0, img.getWidth());
}[/pre]

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本发帖返回顶部