作者sbrhsieh (偶尔想摆烂一下)
看板java
标题Re: [问题] image的缩小处理
时间Tue Jan 26 13:29:06 2010
※ 引述《carlcarl (carl)》之铭言:
: 想请问一下一个问题
: 就是我利用ImageIcon设定好图片後 然後getImage
: 之後利用这个image 使用他的method getScaledInstance来进行压缩
: 压缩完後的图 assign给Image後 得到的大小居然是-1 -1
: 我後来在new BufferedImage的时候就因为这个大小出现错误
: 後来我在bufferedImage中画好image好
: bufferedImage(还没缩小的)使用 getScaledInstance
: assign 给之前的Image
: 再利用bufferedImage的graphics来将这个压缩过後的Image来画到bufferedImage中
: 结果就OK了囧
: 想请问一下 这个是什麽问题啊?<囧>
除了 java.awt.image.BufferedImage/java.awt.image.VolatileImage 外,JRE
提供的 java.awt.image instance 多是实作成 lazy fetching pixel data(
这一点可以从 Image 与相关的 interface 看出来)。
直到对 Image object 做了需要用到 pixel data 或是透过其 image producer 进行
production 操作,Image object 才会进行读取 pixel data 与 meta data 的
动作。invoke Image.getWidth/getHeight method 会触发上述动作,但不会等到
fetching 动作完成才 return,如果当时 width/height 资讯尚未取得直接
return -1。(需要 ImageObserver 参数的操作是 async operation)
在没有 swing 以前,通常会使用 java.awt.MediaTracker 来负责触发与追踪
pixel data 的载入。
使用 swing 的话,最简单的做法是利用 ImageIcon object 来获得已 fetch pixel
data 的 Image object(width/height 资讯与 pixel 都已备妥):ImageIcon
constructor 会负责触发 fetching pixel data 直到完成才 return。
http://www.javaworld.com.tw/jute/post/view?bid=5&id=111083&sty=3
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.129.218
※ 编辑: sbrhsieh 来自: 218.173.132.171 (01/26 14:16)
1F:推 carlcarl:感谢 我後来直接利用new imageicon(压缩过的image) 01/27 05:32
2F:→ carlcarl:就成功了 不知道image会有这样的情形= =|| 01/27 05:35