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的图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 武威世纪计算机英语作文,我的城市武威英语
- 下一篇: shell脚本常用方法