2009年4月22日 星期三

教你在Google Android platform 中處理圖片

Android是Google推出的業界首個完全開放且免費的移動應用開發platform,自從去年11月份Google宣佈舉辦總獎金為1000萬美元的Android開發者大賽以來,人們對瞭解它、使用它的熱情逐漸升溫。自開賽以來全世界已經有近1800個新參賽產品被提交,其中甚至有很多因其獨具一格的創意而登上技術界媒體的頭條,成為人們關注的焦點。在這個平臺上引入了許多有趣的概念,不過很多開發者依然認為它只是一個Linux、Java和Google自己的應用程式設計發展介面API的組合產物。本文將通過介紹圖片處理相關的程式設計,來讓你明白使用Android平臺非常簡單,而且這個平臺也非常強大。

開始之前的入門知識瞭解  現在關於Android的參考資料並不是很多,而當前最好的資料則來自于Google自己的Android的網站:http://code.google.com/android/

在這兒有你所需要的所有必須的開發工具、外掛程式和示例代碼,你可以免費下載它們。下載操作很容易,在此不再浪費筆墨介紹。

1 Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),2 R.drawable.pic1);3 int pic_width = mBitmap.width();4 int pic_height = mBitmap.height();如果你希望閱讀和編寫一個沒有指定資料夾結構的圖片檔,它應該放在模擬器的/data/data/YourPackageName/files/目錄下。舉個例子來說,如果你為你的常式創建一個套裝程式名稱為com.cyl.TutorialOnImages。那麼當你在運行的時候創建一個新的圖片檔,它將被放在/data/data/com.cyl.TutorialOnImages/files/資料夾下。請記住每一個Android應用都將以它自己的用戶和組ID來啟動,因此你專門設定,某些資料夾是不可以通過你的軟體來訪問的。下面是一段當你希望輸出一個點陣圖到一個output.jpg檔時的代碼。

除了線上文檔之外,你還可以通過加入社區論壇的方式來得到技術説明。如果你是初學者,我推薦你選擇使用免費的開發工具Eclipse,因為它集成了最好的Android SDK,另外還有調試軟體和模擬器。根據很多有經驗的開發者介紹,儘管通過命令列或批次處理腳本都可以實現創建Android項目,但是使用Eclipse無疑是最容易上手的方法。  處理圖像的API有哪些?  Android的API可以實現很多強大的功能,其中包括:

·SQLite結構化資料存儲資料庫(SQLite for structured data storage):通過它你不用花很大勁就可以在你的應用程式內嵌入一個微型資料庫。·圖形庫支援:基於OpenGL ES嵌入版的最佳二維圖形庫和三維圖形庫。·集成Web流覽器支援·多媒體支援:它支援常用的音訊、視頻和圖像格式。Google API:映射(Mapping)功能可以讓協力廠商代碼顯示和控制一個Google Map。它還可以通過XMPP支持一個叫做GTalkService的P2P服務。·硬體相關的支援:有很多人們所期待的功能,用來支援GSM電話、藍牙、3G、WiFi、定位服務等相關硬體。

在Google提供的大量API中,我們主要關注下面兩個套裝程式中的相關API:·android.graphics:核心渲染包,它提供了一些初級圖形工具,諸如畫布、顏色篩檢程式、畫筆等,可以讓你直接在螢幕上進行影像處理。·android.graphics.drawable:編譯過的視覺化資源用來做背景、標題或螢幕的其他部分。  由於圖片是點陣圖檔,因此我們將重點瞭解和使用在android.graphics.Bitmap下的API。  檔I/O和支援的圖片格式  Android支援好幾種常見的靜態圖片格式,例如PNG、JPG和GIF。在本文的示例中,我們將使用JPG格式。如果你考慮使用圖片的透視功能,可能選擇PNG格式更合適一些。  為了從你的軟體中查看一個圖片檔,你應該將它放在你的軟體根目錄下的res/drawable目錄下。一旦這個圖片放在這個資料夾下之後,當你重新編譯打包的時候,會自動為它產生一個資源ID。舉個例子來說,如果你擁有一個叫做pic1.jpg的圖片檔,它將可以通過它的資源ID R.drawable.pic1在程式中被訪問。你可以看到這個影像檔副檔名已經被脫去,而R則代表了整體資源檔R.java,它是自動生成的,除非你非常瞭解這個檔中的資源結構,不推薦你編輯它裡面的內容。下面的示例代碼介紹如何通過一個影像檔的資源ID來訪問它。

1 try {
2 FileOutputStream fos = super.openFileOutput("output.jpg",
3 MODE_WORLD_READABLE);
4
5 mBitmap.compress(CompressFormat.JPEG, 75, fos);
6
7 fos.flush();
8 fos.close();
9 } catch (Exception e) {
10 Log.e("MyLog", e.toString());
11 }

圖片查看、顏色和透明  每一個Android應用應該有一個螢幕佈局。你可以在軟體內動態的創建它,或者通過一個外部XML檔來指定它。這個檔默認是main.xml。為了包含一個圖片,你要使用一個叫做ImageView的查看類。下是main.xml檔的內容:
Add main.xml 內.

< ImageView id="@+id/picview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

如同圖片檔可以被通過一個資源ID來訪問一樣,編譯後在全域資源檔R.java中自動為main.xml產生一個叫做R.layout.main的資源ID。下面是當應用程式首次在模擬器上啟動時的默認視圖。圖1、軟體在模擬器上首次啟動  每一個圖像圖元通過一個4位元組整數來展現。最高位元位元組用作alpha通道;換言之用來實現透明/不透明控制。255代表完全不透明;0則代表完全透明。接下來一個位元組是red紅色通道;255代表完全是紅色。依次類推接下來兩個位元組相應的實現綠色和藍色通道。



Ref: http://www.androidlab.cn/

沒有留言:

張貼留言