共500分!!!Java awt 如何将输出到屏幕上的图像输出到图片 如果有好思路另开帖子另给分

yaoyuhang 2010-05-14 03:09:00
现有一个需求,就是原有程序把图行内容在屏幕上输出了。但现在,希望程序运行时,不要再窗口看到,也就是不能输出到屏幕,而是输出到某个图像文件。
注 1:屏幕copy的方式不行,因为不想在屏幕上看到运行的程序。
注2:最好有屏幕输出的重定向方法,即,能够把输出到屏幕的流,重新定向到文件。(此方法最好,但不知道从何下手)
注3:希望多个建议,另外给分。
下面地址,是同样问题的帖子,欢迎来拿分。
http://topic.csdn.net/u/20100514/14/a7ba671b-1ac6-454c-b60e-5e967d79f26c.html
http://topic.csdn.net/u/20100514/14/d75de2aa-b4de-4bf4-9939-fd198f343b2a.html
http://topic.csdn.net/u/20100514/14/225f2468-7355-41d6-ba02-6895c90a944e.html
http://topic.csdn.net/u/20100514/15/4e42ad52-7959-4d1a-bd94-710e27b6587b.html
http://topic.csdn.net/u/20100514/15/4b870d56-87e6-466b-9f9c-78106ae03a10.html

注 4:我说的画面图形,不是单纯的图像。而是一组AWT的控件。有Button,有入力框等。不是用Image等类似类生成的。
...全文
343 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
truediego 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 abbuggy 的回复:]
放在我的空间里了,需要的自己去下吧
[/Quote]

都不知道啥效果,就10个资源分,太黑了吧……
发个可执行jar出来,看看效果,再决定要不要下载source
yaoyuhang 2010-05-17
  • 打赏
  • 举报
回复
先总结该贴如下:
1,问题:
元某C/S程序,C端处理比较复杂,用继承AWT的自制控件,绘制线图,柱图,等混合图形。先想将这部分处理移植成Web程序。由于生成的图形,在IE端只是浏览,没有鼠标操作,所以考虑在Web服务器上,留用原来代码生成Image文件后,发给IE端。这样移植代价最小。

2,shine333 提供的最佳方案 (解释不准确的地方,请高手指正)
AWT中有一个容器类 Container 。绘制在JFrame上的控件,都被包含在该容器中。该类提供paint和paintComponents方法,支持将容器中所有控件描绘到 Graphics 对象中。
这样就解决了,在Web服务器上,隐藏方式的绘制图形(不同于用robot方式的拷贝屏幕)。而且不受运行程序个数的限制(这一点也不同于用robot方式的拷贝屏幕)。

3,补充学习(让高手见笑了)
AWT包,提供了GUI的class。这些class可以分成3大类。
第一类。
单纯的GUI控件。按钮,滚动条,表格等等。
他们都在 java.awt.Component 下
第二类。
控件的事件类。
他们都在 java.awt.Evnet 下
第三类。
就是存放控件的场所,负责控件在视觉上的摆放,层的管理等。比如这次用的 Container和 LayoutManager。
了解了这三大类的作用,下次在遇到类似问题,就好找入手的地方了。

再次感谢各位的热情参与。谢谢。


yaoyuhang 2010-05-17
  • 打赏
  • 举报
回复
已经结贴。不知道给各位的分数是否满意。哈哈。。。如果不满意,可以站内联络我,我尽量平衡大家。这里最委屈的要算,ABBuggy 了。
真的抱歉,没来的及拜读您的代码。各贴给你合计的分数可能不高,您别介意。
我在公司下载您代码不方便,您不妨贴出来,如果确实也解决该问题,我另开贴子给您分。
yaoyuhang 2010-05-17
  • 打赏
  • 举报
回复
感谢大家的热情参与,根据 shine333 高手的指点。问题基本解决了。
马上根据各位的热情参与度散分。

shine333 的代码的精髓我正在整理,整理后再公布给大家。
便于大家学习。

To: ABBuggy 抱歉,您提供的代码我没来得及参考。
估计也一定是高手。
paullbm 2010-05-15
  • 打赏
  • 举报
回复
就是原有程序把图行内容在屏幕上输出了???
=========

既然都能做到这一步了,那肯定是能得到相应的输出流了,而你把图形内容输入到屏幕上,说明有一个图片容器,通过某种方法将输出流输送到这个容器中以达到图形在屏幕显示的效果。
既然如此,你就应该能得到内存中的图形缓冲区对象,有了这个对象,你在图形输出前定义个FileOutputStream,用什么方法输到屏幕的就用什么方法输出到这个文件输出流不就OK了嘛?
yangzongtao01 2010-05-15
  • 打赏
  • 举报
回复
不错 的东西,谢谢~~!!
a1324274221 2010-05-15
  • 打赏
  • 举报
回复
帮顶顶。。。。。
边晓宇 2010-05-15
  • 打赏
  • 举报
回复
这里下载
http://download.csdn.net/source/2354374
边晓宇 2010-05-15
  • 打赏
  • 举报
回复
放在我的空间里了,需要的自己去下吧
边晓宇 2010-05-15
  • 打赏
  • 举报
回复
程序已经写好了 告我你的qq 发给你 收到之后满足要求要给分哦
DarkKnightLeon 2010-05-15
  • 打赏
  • 举报
回复
帮顶,貌似CSDN取消了字数限制
24K純帥 2010-05-14
  • 打赏
  • 举报
回复
LZ还真发了5个帖子。。
humanity 2010-05-14
  • 打赏
  • 举报
回复
真是奇幻需求,奇幻试探。
zfq642773391 2010-05-14
  • 打赏
  • 举报
回复
帮顶了 呵呵
truediego 2010-05-14
  • 打赏
  • 举报
回复
shine333的就可行

也可以直接重载paint方法,把g重定向到一个图像上,这样屏幕上就会只剩下一个框子了

为了隐去这个框子,你可以给你的整个窗口设置位置到屏幕外面去

例如加一句
setLocation(10000, 0);



@Override
public void paint(Graphics g) {
BufferedImage img = new BufferedImage(getWidth(), getHeight(),
BufferedImage.TYPE_INT_ARGB);
g = img.getGraphics();
super.paint(g);

try {
ImageIO.write(img, "PNG", new File("c:/test.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
shine333 2010-05-14
  • 打赏
  • 举报
回复
lz,我的代码是不是你要的
shukuiyan 2010-05-14
  • 打赏
  • 举报
回复
不懂,没懂什么意思
FlyingFish0912 2010-05-14
  • 打赏
  • 举报
回复
太高端了!
holdup20080808 2010-05-14
  • 打赏
  • 举报
回复
大概是把主窗口的重绘方法绘制到内存的image中,如果窗口隐藏时重绘方法不触发,需要自己触发重绘!
junjun1984 2010-05-14
  • 打赏
  • 举报
回复
帮顶下
加载更多回复(8)

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧