关注
前段时间我在VB环境下对这个JPG——》BMP,图形的缩放都有研究不过跟JAVA还是不同的
前段时间我在VB环境下对这个JPG——》BMP,图形的缩放都有研究不过跟JAVA还是不同的
解决方案 »
- 【急等回复,帮忙啊!】为什么menuItem的事件被重复监听
- exe4j 可以打包class和exe文件所结合成的jar 吗
- 如何去除古怪符号?
- 在Frame更改显示图片
- 如何将字符串“EP適用が完了しないデバイスの検出”转换为unicode 格式!谢谢
- 请使用 -Xlint:deprecation 重新编译。是怎么编辑个法~!!!
- 新手,问Servlet同JavaBean的区别在哪。我怎样判断一个class什么
- 高分求解: 如何针对某一个表设计一个通用的插入处理.
- help java中jdbc:odbc桥能否用prepareStatement???
- 关于命令参数的个数??
- 初学者求教!
- 如何实现即时隐藏JComboBox的下拉列表菜单?
http://java.sun.com/products/jimi/
http://www.obrador.com/essentialjpeg/jpeg.htm
http://rsb.info.nih.gov/ij/
构建一个BufferedImage对象,用getGraphics()取得它的Graphics对象
把你的ArrayList中的点用画上去,再用JPEG包把BufferedImage编码后输出就可以.还有一个好点,把所有的点转成int[]用MemoryImageSource类,不过怎么用我忘了,你自己试试,只要能生成Image对象就可以用JPEG包保存.
代码就不想贴了,因为即使简单的都要写一会儿,我以前写过一个标准的图表控件,可转换为本地jpg文件,但又失真,但转png就没有。
你如果要的话,就给我一个mail,我连源码一起发给你。
附:my mail: [email protected]
应该可以使用javax.imageio.*包的东西
可以使用imageIO.read(File f)和imageIO.write(image, Format, File)
读取和写入一个图形
图形类型支持jpeg,jpg,png的格式
你创建一个bufferedimage,所有要画的东西都画在这个bufferedimage上
最后一次性画在界面上了
同时还可以保存起来
麻烦你写个将Model中的图形元素写到bufferedimage中的例子
谢谢啦
把代码发过来我帮你看看
[email protected]
private void send()
{
Socket sock=null;
DataOutputStream outStream=null;
URL myurl;
URLConnection urlc;
String queryString;
String Mesg="",message="";
//message="#"+tf.getText();
//showStatus("Message send");
String chatURL="http://localhost:8080/servlet";
//Sample sam=new Sample();//实现了serializable接口
ByteArrayOutputStream bout=new ByteArrayOutputStream(8000);
ObjectOutputStream out=null;
/*try
{
sock=new Socket("127.0.0.1",8080);
outStream=new DataOutputStream(sock.getOutputStream());
outStream.writeBytes("POST/servlet/acceptServlet"+"HTTP/1.1\r\n");
outStream.writeBytes("Content-type:application/x-www-form-urlen-coded\r\n");
outStream.writeBytes("Content-type:application/octet-stream\r\n");
out=new ObjectOutputStream(new BufferedOutputStream(bout));
out.writeObject(drawingModel);
out.flush();
outStream.writeBytes("Content-length:"+bout.size()+"\r\n");
outStream.writeBytes("\r\n");
byte[] buf=bout.toByteArray();
outStream.write(buf);
}
catch(IOException ioe)
{
ioe.printStackTrace();
} */
try
{
out=new ObjectOutputStream(new BufferedOutputStream(bout));
List shapes=new ArrayList(drawingModel.getShapes());
ListIterator shapeIterator=shapes.listIterator(shapes.size());
while(shapeIterator.hasPrevious())
{
MyShape myShape=(MyShape)shapeIterator.previous();
out.writeObject(myShape);
out.flush();
byte[] buf=bout.toByteArray();
String Mesg1=new String(buf);
Mesg+=Mesg1;
}
queryString="/acceptServlet?message="+URLEncoder.encode(Mesg,"UTF-8");
//byte[] buf=bout.toByteArray();
//Mesg=new String(buf);
//queryString="/acceptServlet?message="+buf;
myurl=new URL(chatURL+queryString);
urlc=myurl.openConnection();
//showStatus("打开连接");
//showStatus(urlc.toString());
urlc.setDefaultUseCaches(false);
urlc.setUseCaches(false);
urlc.setDoInput(true);
urlc.setDoOutput(false);
urlc.connect();
//showStatus("试图连接、读取回应");
InputStreamReader myreader=new InputStreamReader(urlc.getInputStream());
BufferedReader in=new BufferedReader(myreader);
message=in.readLine();
while(message!=null)
{
//tf.setText(message);
message=in.readLine();
}
//showStatus("对话成功");
//Mesg="Applet has successfully send Message to Servlet Server!\n";
//Mesg=Mesg+"Please check the file on the server:serverlog.txt\n";
//ta.append(Mesg);
//b.setEnabled(true);
return;
}
catch(UnsupportedEncodingException e)
{
//ta.append("EncodingError!\n");
//b.setEnabled(true);
return;
}
catch(MalformedURLException e2)
{
//ta.append("MalformedURLException!\n");
//b.setEnabled(true);
return;
}
catch(IOException e1)
{
e1.printStackTrace(System.err);
//showStatus(e1.toString());
//ta.append("IOError!\n");
//b.setEnabled(true);
return;
}
}
为什么还要保存成jpg格式呢?
如果非要这么实现,你试试这样了。BufferedImage img = new BufferedImage(int width,int height,int imageType);
Graphics2D g2 = img.createGraphics();
在你每次out.writeObject(myShape);时,调用g2.drawImage();
(因为你序列化的是图形,肯定可以用drawimage画出来的,具体你可以自己看看了
保存的时候所有的图形都已经画到img上了
可以用imageIO.write(image, Format, File)写到jpg中了。
不知道我说的对不对?
就可以了
比如直线public class MyLine implemets Serializable
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
import java.awt.*;
import java.awt.geom.*;
import java.io.*;
public class MyLine extends MyShape implements Serializable
{
public void draw(Graphics2D g2D)
{
configureGraphicsContext(g2D);
Shape line=new Line2D.Float(getX1(),getY1(),getX2(),getY2());
g2D.draw(line);
}
public boolean contains(Point2D myPoint)
{
Shape line=new Line2D.Float(getX1(),getY1(),getX2(),getY2());
return ((java.awt.Rectangle)(line.getBounds())).contains(myPoint);
}
}
如果需要自己定义读写对象时的自定义方法,才必须实现上面的代码已经实现了学写自己对象,
保存文件时就可以
MyLine line = new MyLine();
FileOutputStream out = new FileOutputStream("save");
ObjectOutputStream objOut = new ObjectOutputStream (out);
objOut.writeObject(line);
objOut.close();
out.close();
不要管他
保存的目的就是能够再次读出
用readObject的方法能都再现就可以了
有没有这种方法
其它的方法我不知道了
fil.createNewFile();
FileOutputStream out = new FileOutputStream(fil);
//ObjectOutputStream objOut = new ObjectOutputStream (out);
Image img = createImage(100,100);
Graphics g3 = img.getGraphics(); int i=0;
while(shapeIterator.hasPrevious())
{
MyShape myShape=(MyShape)shapeIterator.previous();
System.out.println(++i);
img.drawImage(myShape);
objOut.writeObject(myShape);
}
imageIO.write(image, Format, fil);
objOut.close();
out.close();
}
出了一堆错误
^
DrawingInternalFrame.java:204: cannot resolve symbol
symbol : variable objOut
location: class DrawingInternalFrame
objOut.writeObject(myShape);
^
DrawingInternalFrame.java:206: cannot resolve symbol
symbol : variable image
location: class DrawingInternalFrame
imageIO.write(image, Format, fil);
^
DrawingInternalFrame.java:206: cannot resolve symbol
symbol : variable Format
location: class DrawingInternalFrame
imageIO.write(image, Format, fil);
^
DrawingInternalFrame.java:206: cannot resolve symbol
symbol : variable imageIO
location: class DrawingInternalFrame
imageIO.write(image, Format, fil);
imageIO.write(image, Format, fil); 改成
imageIO.write(img, ".jpg", fil); 试试下面的
File fil=new File("C:/save.jpg");
Image img = createImage(100,100);
Graphics g3 = img.getGraphics();
int i=0;
while(shapeIterator.hasPrevious())
{
MyShape myShape=(MyShape)shapeIterator.previous();
System.out.println(++i);
g3.drawImage(myShape);
}
imageIO.write(img, ".jpg", fil);
还得加上import javax.ImageIO.*;
我用的jdk1.4
小写,我忘了,是jdk1.4.1版本的
你的应该也有的
DrawingInternalFrame.java:201: cannot resolve symbol
symbol : method drawImage (MyShape)
location: class java.awt.Graphics
g3.drawImage(myShape);
^
DrawingInternalFrame.java:203: cannot resolve symbol
symbol : variable imageio
location: class DrawingInternalFrame
imageio.write(img, ".jpg", fil);
问个简单的问题解决了就结贴了500分照送
我怎样才能得到BufferedImage的内容长度
那就用public int getWidth(ImageObserver observer)
public int getHeight(ImageObserver observer)
这个方法
调用的时候用img.getWidth(this)
就可以了