--------感謝老大和濤濤(這稱呼只有老大的老大才叫的,這裡放肆一下,嘿嘿),還有良勝。都是牛人的說.
剛要做這個的時候,摸不清下手的點在哪裡,連EMF檔案,向量繪圖,都不清楚是啥, as的繪圖函數壓根就沒用過,B/S模式讀取檔案更是啥都不懂。當時想了兩條方向,要麼在瀏覽器這邊轉格式,要麼在服務端那邊轉完再發過來。根據flex的特色,只能讀取JPG,PNG,GIF格式的圖片,
在瀏覽器這邊轉是必定難度大與伺服器端轉換。而且都是最後轉成JPG,所以肯定是在服務端轉完再傳回來更方便。但是當時腦袋瓜子就是灌水了,naive地覺得在用戶端讀取圖片資料,然後調用個庫swc進行轉換。更naive地覺得可以用交叉編譯補充as繪圖函數的不足.最後才發現一切都是naive以及不想去正視這個問題(也就是想走捷徑).老一輩說得對,想走捷徑的人往往走得最長.
但是還是總結一下交叉編譯這塊。雖然有彎路走,但是收穫不少。
======================================================================================
在這個崎嶇的過程,要感謝兩位一直都幫我的哥們。(jumping,czcomt)都是牛人的說。。。
先是jumping 跟我說了試試開源庫,於是乎我找到了cximage;
後來czcomt跟我說了flash有物理引擎庫,於是乎我找到了交叉編譯,swc,和一系列的flash函數庫.
當時我設想是cximage的解碼庫沒有用到windows api(確實,BMP那塊是沒用到API,但是EMF那塊卻用:(),那麼就可以用cygwin+alchemy把那個庫編譯成swc然後套進SWF來轉換格式。(感謝jiji哥多次過來指導使用cygwin)。
嗯,當時確實沒去瞭解cximage解碼庫是否真的沒用到api,直接幹交叉編譯那塊,其實我很好奇adobe那個把 snake遊戲編成SWC,原來是用C怎麼做的。確實交叉編譯這塊功能很強大,但是只能用來弄純邏輯的,既然是純邏輯的就沒有必要用交叉了吧,AS做純邏輯也是很不錯的。不過當時就是傻,不知道對於這些顯示圖片的東西是非常依賴平台的,既然要跨平台了,就不能用API,也就是要顯示圖片,繪製圖片這些動作都無法靠SWC來實現的。
提供一下在這過程找的資料。
cygwin使用:
http://bbs.actionscript3.cn/viewthread.php?tid=20233&page=1#pid176466
alchemy 配置:
http://bbs.actionscript3.cn/viewthread.php?tid=20233&page=1#pid176466
alchemy調用API
http://203.208.37.132/translate_c?hl=zh-CN&sl=zh-TW&u=http://labs.adobe.com/wiki/index.php/Alchemy:Documentation:Developing_with_Alchemy:C_API&prev=/search%3Fq%3DAlchemy%2Bgcc%2Bubuntu%26hl%3Dzh-CN%26sa%3DG%26newwindow%3D1&rurl=translate.google.cn&usg=ALkJrhgGRp8ick3-rkVnL49WU9RIzNbW7g
cximage官方資料
http://www.codeproject.com/KB/graphics/cximage.aspx
也就在這個時候,我看了cximage 的解碼庫內的WMF這塊的代碼後,徹底絕望了,用了幾個win api。也就說前面的努力都是白費了。第三方庫不是一個走得通的方案,或者應該說第三方非瀏覽器語言是走不通的。平台依賴的問題.不過當時還沒有放棄,就是看了ooo能在linux 上顯示emf圖片,這點倒是讓我喜出望外.看了ooo裡面是用了libemf庫,裡面的函數模擬windows 的,可以運行在linux,freebsd,unix上,但是不能排除它是用了其他平台的API,要知道涉及到平台的問題,大多數都無法跨的。這樣,非flex的第三庫都是走不通,而flex的第三方庫是還沒有讀取emf的。所以走捷徑是不通,要去一點點地分析圖片資訊,讀取裡面的資料再用as繪圖函數繪製出來。
現在已經初步把一個emf圖片畫出來,剩下的功夫放在對每個GDI函數的解讀資料,以及函數模擬上。這部分的總結就等下次把emf,swf,wmf,RGB顏色表,向量繪圖,調色盤之類弄懂後再做。