java屏幕取詞的實(shí)現(xiàn)_第1頁
java屏幕取詞的實(shí)現(xiàn)_第2頁
java屏幕取詞的實(shí)現(xiàn)_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、java 屏幕取詞的實(shí)現(xiàn)? ? 我很早以前就在猜測金山詞霸是怎么實(shí)現(xiàn)這種功 能的。開始我以為是金山詞霸將鼠標(biāo)下的文字圖像剪裁出, 然后使用圖像模式識別出單詞。但后來發(fā)現(xiàn)這個想法不太現(xiàn) 實(shí),不說圖像識別的難度了,這樣識別單詞也會給系統(tǒng)帶來 巨大的開銷。后來偶然發(fā)現(xiàn)金山詞霸是取不到圖像上的文字 的,才認(rèn)識到不是圖像模式識別技術(shù)。 再后來問過一個師兄, 這個師兄說,這是因?yàn)榻鹕皆~霸在系統(tǒng)中做了鉤子,當(dāng)應(yīng)用 程序使用系統(tǒng)提供的文字渲染類庫時,渲染的文字就會通過 回調(diào)鉤子傳給金山詞霸,因此就獲得了這個文本。于是才恍 然大悟。 ? 也就說如果某個應(yīng)用程序恰好不是調(diào)用操作系統(tǒng)的文 本顯示類庫,那么金山詞霸也

2、是沒有辦法取到該應(yīng)用程序上 的文字。 ? ? 這個想法很快就在很多程序上得到驗(yàn)證。如 firefox ,它使用自己的渲染引擎。 再如 Adobe AcrobatReader 它渲染文本也是使用自己的字體渲染技術(shù)(后來金山詞霸專 門為 Adobe AcrobatReader 做了個插件) 。再如 OpenOffice , 它的界面是使用 Swing 來渲染的,因此也沒有辦法取 詞。 ?OpenOffice 這個例子引出了這樣一個事實(shí),所有的 Swing 應(yīng)用程序都是無法使用金山詞霸取詞的。 ? 偶然一 次在 JavaLobby 看貼,看到有人問 Java 6 的 Java 2D 類庫 是不是做了

3、很大改動, 因?yàn)樗麄冏龅?Swing 界面取詞功能失 效了。 詳細(xì)閱讀才得知, 他們是在 Swing 底層 Java 2D 的文 本渲染管道添加偵聽接口,也就是類似于金山詞霸的鉤子。 但由于他們使用了 Java 2D 的內(nèi)部實(shí)現(xiàn)接口,結(jié)果在 Java 升級時,他們的程序就無法正常工作了。 ? 我一直對這個想法很感興趣。因此今天除了學(xué)習(xí)及翻 譯 Java 2D API 的文檔外, 還自己實(shí)驗(yàn)做了個 Swing 屏幕取 詞實(shí)驗(yàn)程序。當(dāng)然這個辭典重點(diǎn)不是翻譯,它只是簡單的湊 了幾個中英文的單詞對照。這個實(shí)驗(yàn)非常粗化,但足以證明 完全可以不通過 Java 2D API 的內(nèi)部接口實(shí)現(xiàn)屏幕取詞。如 果細(xì)

4、化做下去, 將這個類庫作為 JRE 的擴(kuò)展安裝上去, 應(yīng)該 能實(shí)現(xiàn)在所有 Swing 應(yīng)用上的取詞。 ? 這個取詞功能的核心思想是,監(jiān)聽整個 swing 事件系 統(tǒng)的鼠標(biāo)移動事件處理器(通過Toolkit.getDefaultToolkit().addAWTEventListener 實(shí)現(xiàn)),為 所有窗口及其組件添加鼠標(biāo)移動偵聽事件處理器。這些處理 器在初始化時根據(jù)當(dāng)前組件封裝一個代理Graphics : publicclass ProxyGraphics extends Graphics2D ? private Graphics2D proxy;? private ArrayList tex

5、ts = new ArrayList();? /* Creates a new instance of ProxyGraphics */ ? public ProxyGraphics(Graphics2D g2d) ? proxy = g2d;? ? ? public void draw(Shape s) ? proxy.draw(s);? ? public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) ? return proxy.drawImage(img, xform, obs);? ? ? public void drawString(String str, int x,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論