Java BufferedImage使用不需要的背景颜色进行保存
发布时间:2020-12-14 05:48:34 所属栏目:Java 来源:网络整理
导读:提前谢谢你的帮助 描述: 该程序绘制,显示和保存图像.它的工作原理如下:对象本身扩展了Frame.在构造函数中,该对象创建一个BufferedImage,并调用一个绘制到该图像上的方法.然后,它将图像显示在帧上.最后,它将图像保存到文件中(我不关心它使用的是什么格式).
提前谢谢你的帮助
描述: 问题: 我花了一段时间在这上面,我仍然不知道到底发生了什么! import java.awt.Frame ; import java.awt.image.BufferedImage ; import java.io.IOException ; import java.awt.event.WindowEvent ; import java.awt.event.WindowAdapter ; import java.awt.Toolkit ; import java.awt.Graphics2D ; import java.awt.Graphics ; import java.awt.Color ; import java.awt.Dimension ; import javax.imageio.ImageIO ; import java.io.File ; import java.awt.geom.Rectangle2D; public class HGrapher extends Frame{ private BufferedImage img ; private float colors[][] ; //the colors for every rectangle private double availWidth ; private double availHeight ; public HGrapher(String saveFileName,int numRects) throws IOException { //*add window closer addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //*get colors to use setColors( numRects) ; //*figure out the size of the image and frame this.availHeight = (3.0/4) * Toolkit.getDefaultToolkit().getScreenSize().height ; this.availWidth = (3.0/4) * Toolkit.getDefaultToolkit().getScreenSize().width ; //*create the image this.img = new BufferedImage( (int)availWidth,(int)availHeight,BufferedImage.TYPE_INT_ARGB); Graphics2D drawer = img.createGraphics() ; drawer.setBackground(Color.WHITE); this.makeImg( drawer) ; //*display the image this.setSize( new Dimension( (int)availWidth,(int)availHeight ) ) ; this.setVisible(true); //*save the image ImageIO.write(img,"jpg",new File( (saveFileName +".jpg") ) ); } //*draws the image by filling rectangles whose color are specified by this.colors public void makeImg( Graphics2D drawer) { double rectWidth = this.availWidth / (double)colors.length ; for(int i = 0 ; i < colors.length ; i ++) { drawer.setColor( new Color( this.colors[i][0],this.colors[i][1],this.colors[i][2],this.colors[i][3] ) ) ; drawer.fill( new Rectangle2D.Double( rectWidth*i,rectWidth,this.availHeight ) ) ; } } //*paint method public void paint(Graphics g) { Graphics2D drawer = (Graphics2D)g ; drawer.drawImage(img,null) ; } //*creates an array of the colors rectangles are filled with public void setColors( int numRects) { this.colors = new float[ numRects][4] ; //*make every 1st rect red for(int i = 0 ; i< colors.length ; i+= 3) { this.colors[i][0] = (float).8 ; this.colors[i][1] = (float).1 ; this.colors[i][2] = (float).1 ; this.colors[i][3] = (float).8 ; } //*make every 2nd rect green for(int i = 1 ; i< colors.length ; i+= 3) { this.colors[i][0] = (float).1 ; this.colors[i][1] = (float).8 ; this.colors[i][2] = (float).1 ; this.colors[i][3] = (float).8 ; } //*make every 3rd rect for(int i = 2 ; i< colors.length ; i+= 3) { this.colors[i][0] = (float).1 ; this.colors[i][1] = (float).1 ; this.colors[i][2] = (float).8 ; this.colors[i][3] = (float).8 ; } } public static void main (String[]args) throws IOException { HGrapher hg = new HGrapher("saved",14) ; } } 解决方法
setBackground()仅设置用于清除图像的Color,它实际上不会清除图像.在setBackground()之后调用Graphics.clearRect(int,int,int).像这样:
//*create the image this.img = new BufferedImage( (int)availWidth,BufferedImage.TYPE_INT_ARGB); Graphics2D drawer = img.createGraphics() ; drawer.setBackground(Color.WHITE); drawer.clearRect(0,(int)availWidth,(int)availHeight); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |