利用RGB特性,给图片加上各种滤镜(原图,灰度,二值化,冷色,暖色,怀旧,灵魂出窍(照片底色),铁砂网,美白,放大2倍,乐高,ARGB,画布刷新)
原图
灰度
二值化
随机马赛克
灵魂出窍(照片底色)
冷色
暖色
怀旧
铁砂网
美白(和原图对比看,效果不明显)
乐高
转化为ARGB格式,透明度变成原来的一半
放大两倍(左上角是原图,为了方便对比放在最上面)
代码实现(太多就不分开写了,具体有注释)
public class Drawlistener implements MouseListener, ActionListener {
Graphics gr;
DrawUI ui;
String graphics_type;
DrawUI.DrawPanel drawPanel;
BufferedImage image_display;
int[][]imageArray_display;
//初始化函数
Drawlistener(Graphics gr){
this.gr =gr;}
public void setGraphics(Graphics graphics){
this.gr = graphics;
}
// 设置drawPanel 方便刷新
public void setGrawUI(DrawUI.DrawPanel drawPanel){
this.drawPanel = drawPanel;
}
// 刷新画板,即调用paint方法
public void refrash(){
this.drawPanel.paint(gr);
}
/**
* @param e 按钮事件
* 按钮事件
*/
@Override
public void actionPerformed(ActionEvent e) {
String btnstr = e.getActionCommand ();
if (btnstr.equals("原图")){
graphics_type ="原图";
paint_original(gr);
}else if(btnstr.equals("灰度")){
graphics_type ="灰度";
// 遍历二维数组来绘制图片
draw_gray_Image(imageArray_display,gr);
}else if(btnstr.equals("二值化")){
graphics_type ="二值化";
draw_Image_binarization(imageArray_display,gr);
}else if(btnstr.equals("随机马赛克")){
graphics_type ="随机马赛克";
draw_Mosaic(gr);
}else if (btnstr.equals("冷色")){
graphics_type ="冷色";
draw_cold(gr);
}else if (btnstr.equals("暖色")){
graphics_type ="暖色";
draw_warm(gr);
}else if(btnstr.equals("灵魂出窍")){
graphics_type ="灵魂出窍";
draw_photo_negative(gr);
}else if(btnstr.equals("怀旧")){
graphics_type ="怀旧";
draw_oldimage(gr);
}else if(btnstr.equals("放大2倍")){
graphics_type ="放大2倍";
draw_bigger_2(gr);
}else if(btnstr.equals("美白")){
graphics_type ="美白";
draw_Whitening(gr);
}else if (btnstr.equals("铁砂网")){
graphics_type ="铁砂网";
draw_oil_painting(gr);
}else if (btnstr.equals("乐高")){
graphics_type ="乐高";
draw_LEGO(gr);
}else if (btnstr.equals("刷新")){
graphics_type ="刷新";
refrash();
}else if (btnstr.equals("ARGB")){
graphics_type ="ARGB";
draw_ARGB(gr);
pixelToRGB();
}
}
/**
* 整数转三原色值
*/
public void pixelToRGB(){
// 将一个像素值 转为 三原色值
int num = 8421504;
int red = (num >> 16) & 0xFF;
System.out.println ("红"+red);
int green = (num >> 8) & 0xFF;
System.out.println ("绿"+green