国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

用JAVA對(duì)彩色圖片進(jìn)行灰度變換

2019-11-18 15:20:45
字體:
供稿:網(wǎng)友

  長(zhǎng)沙市 省計(jì)量局
傅勝
---- 我們?cè)诰W(wǎng)頁(yè)設(shè)計(jì)過程中,有時(shí)為了模擬單色VGA 的顯示效果或?yàn)榱诉M(jìn)行某種形象的夸張?jiān)O(shè)計(jì),而將彩色圖形畫面變?yōu)楹诎罪@示,這就需要使用彩色到黑白的灰度變換技術(shù)。

---- 灰度變換的算法其實(shí)很簡(jiǎn)單,只要提取每個(gè)象素點(diǎn)的紅、綠、藍(lán)三原色,然后根據(jù)公式:灰度值= 紅色亮度值*30%+綠色亮度值*59%+藍(lán)色亮度值*11%,計(jì)算出一個(gè)灰度值,并將其作為紅,綠,藍(lán)三原色的新值重新寫回顯存即可。

---- 具體步驟如下:

---- 一,調(diào)用Graphics 對(duì)象的drawImage() 方法,在applet 中顯示出一幅名為 TEST.JPG 的彩色圖象,drawImage() 的調(diào)用形式為: g.drawImage(name,x,y, width,heigth,this)。

---- 二,定義一個(gè)數(shù)組存放這幅彩色圖像的RGB 值,數(shù)組大小就是圖像的象素個(gè)數(shù)。使用PixelGrabber()獲取每個(gè)象素點(diǎn)的RGB值。

---- 三,使用灰度變換公式計(jì)算出每個(gè)象素點(diǎn)的灰度值,并將其作為新的RGB 值存放回?cái)?shù)組中,再調(diào)用createImage()方法構(gòu)造出新的黑白圖象。

---- 四,顯示出該黑白圖片。為了防止變換過程中的閃爍現(xiàn)象,程序中還使用了雙緩沖技術(shù),即先在虛屏中畫好圖象,再一次性的顯示出來。

---- 程序中使用鼠標(biāo)來控制彩色到黑白的變換。

---- 灰度變換的tt4.java源程序如下所示:

import java.applet.*;
import java.awt.*;
import java.awt.image.*;
public class tt4 extends Applet
{
Image art,Buf;
int onced=0;
boolean is_color=true;
Graphics Bufg;//使用雙緩沖區(qū)技術(shù)抑制閃爍;
Dimension xy=null;
public void init()
{ art=getImage(getDocumentBase(),"test.jpg");
resize(640, 480);//裝入圖片;
}
public void paint(Graphics g)
{ if (onced==0)
//假如是第一次裝入圖片,則直接顯示;
{ g.drawImage(art,0,0,this);
}
if ((onced==1)(onced==2))
//假如正在進(jìn)行灰度變換,則提示等待;
{ g.setColor(new Color(255,200,0));
g.drawString("running!", 1, 30);
}
if (onced==3)
//假如灰度變換完畢,則顯示結(jié)果;
{ if (is_color) g.drawImage(Buf,0,0,this);
else g.drawImage(art,0,0,this);
is_color=!is_color;//在彩色與黑白之間變化;
}
}
public boolean mouseDown(Event evt, int x, int y)
{ if (onced==0)
{ onced=1;
}
repaint();//用鼠標(biāo)觸發(fā)事件;
return true;
}
public boolean mouseUp(Event evt, int x, int y)
{ if (onced==1)
{ onced=2;
int wd=art.getWidth(this); //取得圖片寬;
int ht=art.getHeight(this);//取得圖片高;
GetPixels(art,0,0,wd,ht);//調(diào)用灰度變換方法;
}
return true;
}
public void GetPixels(Image img,int x,int y,int w,int h)
{ int[]pixels=newint[w*h];
//定義一塊內(nèi)存空間;
int gray;
PixelGrabber pg=new PixelGrabber(img,x,y,w,h,pixels,0,w);
try{pg.grabPixels();
}
catch(InterruptedExceptione)
{System.err.return;
}
for(intj=0;j> 16)&0xff)*0.3);
gray+=(int)(((pixels[w*j+i]>>8)&0xff)*0.59);
gray+=(int)(((pixels[w*j+i] )&0xff)*0.11);
//由紅,綠,藍(lán)值得到灰度值;
pixels[w*j+i]=(255<<24)(gray<<16)(gray<<8)gray;
}
}
Image pic=createImage(new MemoryImageSource(w,h,pixels,0,w));
Bufg.drawImage(pic,0,0,this); //顯示黑白圖片;
onced=3;
repaint();
}
public void update(Graphics g)
{ if(xy==null)
{ xy=this.size();
Buf=createImage(xy.width,xy.height);
Bufg=Buf.getGraphics();
}
paint(g);//修改update方法,避免閃爍;
}
}

---- 將源程序編譯后得到tt4.class文件,利用Java Applet Wizard自動(dòng)生成的 Html文件(tt4.html) ,就可在瀏覽器中欣賞它的效果了。

---- 包含applet的HTML文件如下所示:

< html >
< head >
< title >對(duì)彩色圖片進(jìn)行灰度變換< /title >
< /head >
< body >
< p align="center" >< applet
code=tt4.class
name=tt4
width=250
height=188 >
< /applet >
< /body >
< /html >
---- 其中參數(shù)width 和height就是待變換圖片的寬與高。假如要更換圖片,請(qǐng)將待換圖片改名為test.jpg。

---- 運(yùn)行時(shí),單擊鼠標(biāo)左鍵就可將彩色圖片變換成黑白圖片,再單擊一下鼠標(biāo)左鍵又可還原為彩色圖象。本程序在Windows95、Visual J++1.1、IE4.0 環(huán)境下運(yùn)行通過。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 双鸭山市| 洪雅县| 扶绥县| 仪征市| 丰宁| 定南县| 仁怀市| 驻马店市| 永泰县| 尼勒克县| 明光市| 元谋县| 朝阳市| 沂南县| 楚雄市| 邹平县| 普兰店市| 太湖县| 察哈| 杨浦区| 江陵县| 禄丰县| 库尔勒市| 浦东新区| 津市市| 内丘县| 丽水市| 马龙县| 大方县| 三江| 文安县| 凌海市| 奉化市| 泌阳县| 和龙市| 灌云县| 湖南省| 民勤县| 靖宇县| 越西县| 隆化县|