日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java图像处理

發(fā)布時(shí)間:2023/12/20 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java图像处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在開發(fā)應(yīng)用程序時(shí),為了使程序界面美觀,可以為應(yīng)用程序窗口添加背景圖片,方法是通過Java的繪圖技術(shù)在控件上繪制圖像,并將帶有圖片的控件添加到窗體上,運(yùn)行程序,就可以看到在窗體顯示的圖片。跟圖形的操作類似,在圖像處理中我們也是通過重寫JComponent類的paint()方法來實(shí)現(xiàn)對(duì)圖像的各種操作的。下面是用到的一些方法的定義

public abstract boolean drawImage(Image img,int x,int y,ImageObserver observer);//繪制圖像 //參數(shù)img是需要繪制的圖像對(duì)象,x、y是繪制頂點(diǎn)的坐標(biāo),observer是圖像的觀察者,一般是繪制圖像的控件public abstract boolean drawImage(Image img,int x,int y,int width,int height,ImageObserver observer);//按給定大小繪制圖像 //比上一個(gè)方法多出的width和height分別是圖像的寬和高,通過這兩個(gè)參數(shù),可以實(shí)現(xiàn)對(duì)圖像的縮放操作public abstract boolean drawImage(Image img,int dx1,int dy1,int dx2,int dy2,int sx1,int sy1,int sx2,int sy2,ImageObserver observer);//翻轉(zhuǎn)圖像 //參數(shù)dx1、dy1、dx2、dy2分別是目標(biāo)矩形的第1、2個(gè)角的坐標(biāo);sx1、sy1、sx2、sy2是源矩形第1、2個(gè)角的坐標(biāo) //通過互換drawImage()方法中源矩形第1個(gè)角和第2個(gè)角的x坐標(biāo),可以實(shí)現(xiàn)圖像的水平翻轉(zhuǎn);通過互換drawImage()方法中源矩形第1個(gè)角和第2個(gè)角的y坐標(biāo),可以實(shí)現(xiàn)圖像的垂直翻轉(zhuǎn);//以下方法是Graphics2D類的方法,即在重寫paint()方法時(shí)要將Graphics參數(shù)g轉(zhuǎn)換為Graphics2D再進(jìn)行調(diào)用 public abstract void rotate(double theta);//旋轉(zhuǎn)圖像 //theta是旋轉(zhuǎn)的角度,以弧度為單位public abstract void shear(double shx,double shy);//傾斜圖像 //shx、shy是正x、y軸方向移動(dòng)坐標(biāo)的乘數(shù),它可以作為其y、x坐標(biāo)的函數(shù)public BufferedImage createScreenCapture(Rectangle screenRect);//裁剪圖片 //screenRect是屏幕上被截取的矩形區(qū)域,返回值即是從屏幕上截取的緩沖圖像對(duì)象public final BufferedImage filter(BufferedImage src,BufferedImage dst);//調(diào)整圖片的亮度 //src是要過濾的源BufferedImage對(duì)象;dst是目標(biāo)BufferedImage對(duì)象,或nullpublic ColorConvertOp(ColorSpace srcCspace,ColorSpace dstCspace,RenderingHints hints);//轉(zhuǎn)換彩色圖片為灰度圖片 //srcCspace是原顏色空間對(duì)象;dstCspace是目標(biāo)顏色空間對(duì)象;hints是用于控制顏色轉(zhuǎn)換的RenderingHints對(duì)象,或nullpublic Image createImage(ImageProducer producer);//使用像素值生成圖像 //producer是圖像生成器,返回值是該方法執(zhí)行成功返回一個(gè)Image對(duì)象

下面是使用上述方法的一些例子

class DrawImagePanel extends JPanel{ //繪制圖像public void paint(Graphics g){g.drawImage(img,0,0,this); //繪制圖像} }class ZoomImagePanel extends JPanel{ //繪制指定大小的圖片public void paint(Graphics g){g.clearRect(0,0,this.getWidth(),this.getHeight());imgWidth = img.getWidth(this);imgHeight = img.getHeight(this); //獲取圖片的寬高float value = slider.getValue(); //滑塊組件的取值newW = (int)(imgWidth*value/100);newH = (int)(imgHeight*value/100); //計(jì)算圖片縮放后的寬高g.drawImage(img,0,0,newW,newH,this); //繪制制定大小的圖片} }class PartImagePanel extends JPanel{ //翻轉(zhuǎn)圖像public void paint(Graphics g){g.clearRect(0,0,this.getWidth(),this.getHeight());g.drawImage(img,dx1,dy1,dx2,dy2,dx2,dy1,dx1,dy2,this); //水平翻轉(zhuǎn)} }class RotatePanel extends JPanel { //旋轉(zhuǎn)圖片public void paint(Graphics g){Graphics2D g2 = (Graphics2D)g;g2.drawImage(img,80,10,260,150,this);g2.rotate(Math.toRadians(10));g2.drawImage(img,80,10,260,150,this);g2.rotate(Math.toRadians(10));g2.drawImage(img,80,10,260,150,this);} }class ShearImagePanel extends JPanel { //傾斜圖片public void paint(Graphics g){Graphics2D g2 = (Graphics2D)g;g2.shear(0.5,0);g2.drawImage(img,10,20,220,160,this);} }class CutImagePanel extends JPanel { //裁剪圖片public void paint (Graphics g){Graphics2D g2 = (Graphics2D)g;g2.drawImage(img,0,0,this.getWidth(),this.getHeight(),this);g2.setColor(Color.WHITE);if(flag){float[] arr = {5.0f};BasicStroke stroke = new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL,1.0f,arr,0);g2.setStroke(stroke);g.clearRect(0,0,this.getWidth(),this.getHeight());g.drawImage(createScreenCapture(g2.drawRect(pressPanelX,pressPanelY,releaseX-pressX,releaseY-pressY);),0,0,releaseX-pressX,releaseY-pressY,this);}} }class CreateImagePanel extends JPanel{ //使用像素值生成圖像public void paint(Graphic g){int w=300,h=220;int pix[]=new int[w*h];int index = 0;for(int y=0;y<h;y++){int red=(y*255)/(h-1);for(int x =0;x<w;x++){int blue=(x*255)/(w-1);pix[index++]=(255<<24)|(red<<16)blue;}}ImageProducer imageProducer = new MemoryImageSource(w,h,pix,0,w);Image img=createImage(imageProducer);g.drawImage(img,0,0,getWidth(),getHeight(),this);} }

總結(jié)

以上是生活随笔為你收集整理的Java图像处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。