您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用JAVA對彩色圖片進行灰度變換”,在日常操作中,相信很多人在怎么用JAVA對彩色圖片進行灰度變換問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用JAVA對彩色圖片進行灰度變換”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
---- 我們在網頁設計過程中,有時為了模擬單色VGA
的顯示效果或為了進行某種形象的夸張設計,而將彩色圖形畫面變為黑白顯示,這就需要使用彩色到黑白的灰度變換技術。
----
灰度變換的算法其實很簡單,只要提取每個象素點的紅、綠、藍三原色,然后根據公式:灰度值=
紅色亮度值*30%+綠色亮度值*59%+藍色亮度值*11%,計算出一個灰度值,并將其作為紅,綠,藍三原色的新值重新寫回顯存即可。
----
具體步驟如下:
---- 一,調用Graphics 對象的drawImage() 方法,在applet 中顯示出一幅名為 TEST.JPG
的彩色圖象,drawImage() 的調用形式為: g.drawImage(name,x,y, width,heigth,this)。
----
二,定義一個數組存放這幅彩色圖像的RGB 值,數組大小就是圖像的象素個數。使用PixelGrabber()獲取每個象素點的RGB值。
----
三,使用灰度變換公式計算出每個象素點的灰度值,并將其作為新的RGB 值存放回數組中,再調用createImage()方法構造出新的黑白圖象。
---- 四,顯示出該黑白圖片。為了防止變換過程中的閃爍現象,程序中還使用了雙緩沖技術,即先在虛屏中畫好圖象,再一次性的顯示出來。
---- 程序中使用鼠標來控制彩色到黑白的變換。
---- 灰度變換的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;//使用雙緩沖區技術抑制閃爍;
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))
//如果正在進行灰度變換,則提示等待;
{ g.setColor(new
Color(255,200,0));
g.drawString("running!", 1, 30);
}
if
(onced==3)
//如果灰度變換完畢,則顯示結果;
{ 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();//用鼠標觸發事件;
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);//調用灰度變換方法;
}
return
true;
}
public void GetPixels(Image img,int x,int y,int w,int h)
{
int[]pixels=newint[w*h];
//定義一塊內存空間;
int gray;
PixelGrabber pg=new
PixelGrabber(img,x,y,w,h,pixels,0,w);
try{pg.grabPixels();
}
catch(InterruptedExceptione)
{System.err.println("interrupted
waiting for pixels!");
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);
//由紅,綠,藍值得到灰度值;
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自動生成的 HTML文件(tt4.html) ,就可在瀏覽器中欣賞它的效果了。
---- 包含applet的HTML文件如下所示:
< html >
< head
>
< title >對彩色圖片進行灰度變換< /title >
< /head >
<
body >
< p align="center" ><
applet
code=tt4.class
name=tt4
width=250
height=188 >
<
/applet >
< /body >
< /html >
---- 其中參數width
和height就是待變換圖片的寬與高。如果要更換圖片,請將待換圖片改名為test.jpg。
----
運行時,單擊鼠標左鍵就可將彩色圖片變換成黑白圖片,再單擊一下鼠標左鍵又可還原為彩色圖象。本程序在Windows95、Visual J++1.1、IE4.0
環境下運行通過。
到此,關于“怎么用JAVA對彩色圖片進行灰度變換”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。