java绘制图片
‘壹’ 在java的image图片类中画线怎么画
importjava.awt.*;
classMyCanvasextendsCanvas{
publicvoidpaint(Graphicsg){
g.setFont(newFont("华文行楷",Font.PLAIN,20));
g.setColor(Color.RED);
g.drawString("绘图测试!",20,20);
g.drawLine(30,60,100,60);
g.setColor(Color.BLUE);
g.draw3DRect(60,50,70,30,false);
g.setColor(Color.BLUE);
g.fillArc(0,60,65,65,40,80);
g.setFont(newFont("华文彩云",Font.PLAIN,30));
g.setColor(Color.PINK);
g.drawString("彩云之南",20,120);
}
}
publicclassAWTDrawing{
publicstaticvoidmain(Stringargs[]){
Framef=newFrame("AWT绘图");
MyCanvasp=newMyCanvas();
f.add(p);
f.setSize(170,170);
f.setBackground(newColor(160,220,220));
f.setVisible(true);
}
}
效果图(该网站bug315上面还有很多java相关的知识,你可以去学习一下呵呵):
‘贰’ 有谁能告诉我idea中java的绘制图像为什么会这样出现错误,并且没有图像
本地测试了一下,没有重现图片上的错误,贴出代码提供参考:
public class ImageOnPanel {
public static void main(String[] args) {
JFrame frame = new JFrame("image test");
MyPanel myPanel = new MyPanel();
frame.getContentPane().add(myPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 500);
frame.setVisible(true);
}
}
class MyPanel extends JPanel{
@Override
public void paint(Graphics g) {
Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/w(1).png"));
g.drawImage(image, 0, 0, this);
}
}
‘叁’ java graphics.drawimage 绘制图片后闪了一下就不见了
你需要覆盖jLabelIMGDisplay的paint方法来实现绘制,否则你这样在这里绘制后,jLabelIMGDisplay的paint在其他地方(任何界面事件都有可能,比如鼠标移动、窗口大小/位置改变等)触发后就把你在这儿绘制的给冲掉了。
‘肆’ java中鼠标点击绘制图形时,其他按钮和插入的图片出现错位。
super.paintComponent(g);是必须的,整个面板都要重绘才行,具体机理我也不会熟悉了,swing这东西没怎么研究……
而你加了这个之后,面板重绘,你之前画的东西自然会被擦掉,解决的方法也很简单,每次面板先重绘,然后再画你要画的东西。那么你把你要画的东西先记在list里面,然后每次画的时候,把list里面的东西都画出来,这样不就不会丢失之前的信息了吗,修改部分如下:
classPanelMextendsJPanel
{
ImageIconicon=newImageIcon("app.gif");
JLabeljl=newJLabel(icon,SwingConstants.CENTER);
intx,y;
booleanboo=false;
//新增的list
privateList<Integer>listX=newArrayList<Integer>();
privateList<Integer>listY=newArrayList<Integer>();
publicPanelM()
{
add(jl);
addMouseListener(newMouseAdapter()
{
publicvoidmousePressed(MouseEventm)
{
x=m.getX();
y=m.getY();
//每次都记到list里面
listX.add(x);
listY.add(y);
repaint();
boo=true;
}
});
}
publicvoidpaintComponent(Graphicsg)
{
if(boo)
{
super.paintComponent(g);
//把list里面的东西都画出来
for(inti=0;i<listX.size();i++)
{
g.fillOval(listX.get(i),listY.get(i),20,20);
}
}
}
}
‘伍’ java中绘制图片的setframe方法是什么意思
重写setFrame方法,自己调整cell的frame
- (void)setFrame:(CGRect)frame
{
// 更改x、宽度
frame.origin.x = kTableBorderWidth;
frame.size.width -= kTableBorderWidth * 2;
// 更改顶部间距、每个cell之间的间距
frame.origin.y += kTableTopBorderWidth;
frame.size.height -= kTableViewCellMargin;
[super setFrame:frame];
}
‘陆’ java ! paint绘制图片时都是以左上角为准,现在我想以中心点往下为准,应该怎么写
可以这样搞,用BufferedImage实例一个图片,用getGraphics()方法得当这张图片的画笔,一切的作图都用这个画笔画,画完之后将这张图片绘制到界面上,从界面的中心点画就ok了
‘柒’ Java程序中图片的使用方法
使用图像根据需要,可以有多种方法。
如果是放在组件中,如JButton、JLabel中,这些组件需要的是Icon接口的图像,那么使用ImageIcon类来加载图像比较好,new
ImageIcon(String
filename)或new
ImageIcon(URL
location)都可以直接加载图像文件。
甚至你还可以先用IO读出byte流,也能用byte[]创建ImageIcon。还可以由已有的Image来创建。
更为高级的用法是,你还可以先创建个空的ImageIcon,然后重写paintIcon(Component,Graphics,int,int)方法实现手工绘制!
如果你是要完成图像绘制,那么使用Image或BufferedImage比较好。
Toolkit.getDefaultToolkit().getImage(String或URL)就能加载图像。
这种方法需要一个图像观察者来监视图像是否加载完成,因为图像加载是异步的。通常,你用一个swing组件就可以充当这个角色。不过少用JLabel,因为我有一个程序用JLabel做观察者CPU占用率经常90%多,有时不出界面。用JPanel或JFrame都没出过这个问题。从API文档看,应该是所有的swing可视组件都实现了观察者接口。
选了观察者后,不用刻意观察加载情况,很简单的一个方法:swing组件的while(!prepareImage(Image));就可以了。
Image接口是Graphics类绘图drawImage要用的,所以绘制时应该选这个。
BufferedImage是实现了Image接口的图像,可以直接操作像索数据!所以利用算法生成图像再绘制,或图像处理可以使用这种方法。如浮雕、反色等。
加载方法是ImageIO类的read方法。
‘捌’ 如何用java对图片进行标记和绘制处理
可以把图片加入到JLabel里面;JLabel有这样一个方法 JLabel(String text, int horizontalAlignment) 创建具有指定文本和水平对齐方式的 JLabel 实例。
‘玖’ Java编写时,怎么输出一张图片呀
(1)首先用ImageIO类读取这张图片
(2)如果要对这张图片修改,通过图片获取Graphics对象,再调用Graphics的方法来绘制、修改。
(3)再调用ImageIO的方法将图片输出到特定IO流即可。
具体代码实例可参考李刚的疯狂Java讲义的11.8节。
‘拾’ java 在已有的图片上画图
//读取图片文件,得到BufferedImage对象
BufferedImage bimg=ImageIO.read(new FileInputStream("图片文件路径"));
//得到Graphics2D 对象
Graphics2D g2d=(Graphics2D)bimg.getGraphics();
//设置颜色和画笔粗细
g2d.setColor(Color.RED);
g2d.setStroke(new BasicStroke(3));
//绘制图案或文字
g2d.drawString("文本", x坐标, y坐标);
//保存新图片
ImageIO.write(bimg, "JPG",new FileOutputStream("文件路径"));