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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中根据自己的需要画一张jgp的图片

發布時間:2024/3/24 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中根据自己的需要画一张jgp的图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在此之前首先要了解幾個比較重要的知識點BufferedImage,ImageIO,Graphics2D,Color類的操作方法

1.BufferedImage類

? ? BufferedImage是Image是抽象類的實現類,主要作用是將圖片加載到內存中,方便我們對其進行處理。

? 這里介紹一下幾個構造方法。都是可以創建一個圖像

//指定寬高、圖像字節灰度
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY)
//創建一個不帶透明色的對象
BufferedImage bimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//創建一個帶透明色的對象
new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

其中width是圖像寬度,height是圖像高度,第三個是圖像類型

另外介紹一個方法getGraphics,改方法是獲取畫筆的意思,可以通過獲取Graphics2D的對象進行對圖片修改,這個下面講到怎么使用,除了getGraphics方法,還有getWidth獲取圖片寬getHeight獲取圖片高度,getMinY獲取圖片最小高度,即y的值,getMinX為獲取圖片最小寬度,即x值

getRGB方法,獲取圖片某一個點,或者區域的顏色,這樣返回的是一個int,基本看不懂,這里就要了解一下Color類了,下面會介紹

2.ImageIO總共兩個方法要介紹,分別是read和write,都是靜態方法

? ?read是可以將一個圖片讀取為BufferedImage類型的對象,示例

BufferedImage image = ImageIO.read(new FileInputStream(new File("D:\\Desktop\\tu\\tu.jpg")));

? 有了image我們就能對圖像進行操作。

? ?write是可以將BufferedImage的對象輸入到一個具體的文件中,如下所示

ImageIO.write(image,"jpg", new FileOutputStream("D:\\Desktop\\tu\\tu.jpg"));

3.Graphics2D類提供了強大的繪圖能力

?這里介紹幾個方法setColor(Color color)設置畫筆的顏色,drawRect(int x,int y,int width,int height)方法畫矩陣,前面的x,y指定起筆的位置,后面指定寬高。

畫圓角矩形:drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight),線框,最后兩個寬高是圓角弧的橫向直徑和縱向直徑;fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight),顏色填充。

setBackground(Color color)設置背景顏色

setFont(Font?font);設置字體

drawString(String str,int x,int y);向圖片中寫入str字符串,從坐標為x,y的位置開始顯示

drawLine(int x1,int y1,int x2,int y2);畫直線,從x1,y1到x2,y2,如果相同就是個點

drawPolyline(int[],int[],int),各點的x、y坐標,折線數。

更多方法請上官網查看,這些基本上也就夠用了

4.Color類是用來封裝顏色的

所謂RGB顏色模式是指使用三種基色:紅、綠、藍,通過三種顏色的調整得出其它各種顏色,這三種基色的值范圍為0~255。例如Color c = new Color(255,200,0);定義橙色?,更多的看下表

?Color類有一個構造器

public Color(int red, int green, int blue, int alpha)

其中前面三個是基礎顏色的值,后面一個指透明的程度,當為255表示完全不透明

書接上文BufferedImage類的getRGB的方法可以轉換為Color類便于我們分析,如下

Color color = new Color(image.getRGB(x, y));

這樣就可以獲取到一個像素的顏色了

5.實戰,我們先畫一個圖出來

public static void writePhoto(){try {BufferedImage image=new BufferedImage(640, 512, BufferedImage.TYPE_INT_RGB);Graphics2D g2=(Graphics2D)image.getGraphics();g2.setColor(Color.WHITE);g2.fillRect(0,0,640,512);//為整個畫布天上白色for (int i=image.getMinY();i<image.getHeight();i++){for (int j=image.getMinX();j<image.getWidth();j++){if(i==j){g2.setColor(new Color(255,0,0));//設置顏色g2.drawRect(i,j,1,1);}}}ImageIO.write(image,"jpg", new FileOutputStream("D:\\Desktop\\tu\\tu.jpg"));}catch (Exception e){e.printStackTrace();} } 上訴方法獲得一個分割線的圖片

?

?

然后我們將這個圖片的紅色線換位綠色的線,通過遍歷實現

public static void writePhoto1(){try {BufferedImage image=ImageIO.read(new FileInputStream("D:\\Desktop\\tu\\tu.jpg")) ;Graphics2D g2=(Graphics2D)image.getGraphics();for (int i=image.getMinY();i<image.getHeight();i++){for (int j=image.getMinX();j<image.getWidth();j++){Color color = new Color(image.getRGB(j, i));if(color.getRed()>150&&color.getGreen()<30&&color.getBlue()<30){g2.setColor(Color.green);g2.drawRect(j,i,1,1);}}}ImageIO.write(image,"jpg", new FileOutputStream("D:\\Desktop\\tu\\tu.jpg"));}catch (Exception e){e.printStackTrace();} }

由于上面加了顏色,所以不是特別準確,因此,我們用范圍去判斷,只要他在紅色范圍內都讓他變為綠色,實現替換。最終效果如下

?

?

總結

以上是生活随笔為你收集整理的java中根据自己的需要画一张jgp的图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。