java图片色阶调整和亮度调整代码示例
程序员文章站
2023-12-15 15:49:04
对java图片处理的内容涉猎不深,言辞简陋望请见谅。
java实现色阶调整,即调整图片rgb分量,进而也可以调节图片亮度。
测试代码
public stati...
对java图片处理的内容涉猎不深,言辞简陋望请见谅。
java实现色阶调整,即调整图片rgb分量,进而也可以调节图片亮度。
测试代码
public static void main(string[] args) { //文件与bufferedimage间的转换 bufferedimage bi=file2img("test.jpg"); //读取图片 bufferedimage bii=img_color_gradation(bi,100,0,0); img2file(bii,"jpg","test1.jpg"); //生成图片 }
色阶调整代码
//图片色阶调整,调整rgb的分量 public static bufferedimage img_color_gradation(bufferedimage imgsrc, int r, int g, int b) { try { //创建一个不带透明度的图片 bufferedimage back=new bufferedimage(imgsrc.getwidth(), imgsrc.getheight(),bufferedimage.type_int_rgb); int width = imgsrc.getwidth(); int height = imgsrc.getheight(); for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { int pixel = imgsrc.getrgb(j, i); color color = new color(pixel); int red= color.getred()+r; if(red>255) red=255; if(red<0) red=0; int green= color.getgreen()+g; if(green>255) green=255; if(green<0) green=0; int blue= color.getblue()+b; if(blue>255) blue=255; if(blue<0) blue=0; color = new color(red,green,blue); int x=color.getrgb(); back.setrgb(j,i,x); } } return back; } catch (exception e) { e.printstacktrace(); return null; } }
图片读取,和存储函数
//读取图片 public static bufferedimage file2img(string imgpath) { try { bufferedimage bufferedimage=imageio.read(new file(imgpath)); return bufferedimage; } catch (exception e) { e.printstacktrace(); return null; } } //保存图片,extent为格式,"jpg"、"png"等 public static void img2file(bufferedimage img,string extent,string newfile) { try { imageio.write(img, extent, new file(newfile)); } catch (exception e) { e.printstacktrace(); } }
分享:
下面先给出亮度和对比度的计算公式
(rgb表示原图的色彩分量的值,nrgb表不处理后的值,mbrightness表示调整的亮度值,mcontrast表示调整的对比度值,avg表示整个图像像素的平均值)
亮度:nrgb=rgb+mbrightness
对比度:nrgb=(rgb-avg)*(1-percent%)+avg percent%取值范围为(-1~1) 0为原始值
对比度公式也很好证明,将其展开
nrgb=rgb-rgb*percent%-avg+avg*percent%+avg
nrgb=rgb-rgb*percent%+avg*percent%
对于整个图像矩阵来说,要保证亮度不变,即整个矩阵的代数和不变。
而avg=(rgb1+rgb2+....rgbn)/n (1)
(nrgb1+nrgb2+.....nrgbn)=(rgb1+rgb2+...rgbn)+n*avg*percent%-(rgb1+rgb2+...rgbn)*percent% (2)
将(1)式代入(2)式即可
总结
以上就是本文关于java图片色阶调整和亮度调整代码示例的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出。
推荐阅读