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/

2009年4月21日 星期二

Android與山寨機的關係

Android與山寨機的關係,是一個特別另人感興趣的話題。最近實地與北京Androidin社群核心成員交換許多想法,有些觀點很值得台灣硬體廠商參考,筆者就一些討論,整理出部份觀察心得與大家交流。
Android在中國地區投下一顆能量彈,這可能是一顆破壞力驚人的炸彈,不過,最可能的地方是它具備「定向精確爆破」的能力。山寨機的成功,讓不管是本地,或是外來的廠商,都打著「山寨模式」的主意。山寨模式在大陸地區出現快三年的時間,在中國本地的銷售數字為一億台,這還不包括「外銷」到海外的數量。這段期間,中國幾家山寨機廠商,也在短短時間內,一躍成為前幾大的本土品牌手機商。
山寨商的腦筋動得快,現在更把主意打到Android上頭。根據山寨商的說法,Android在中國地區會是一個很好的機會,也就是「智能型Android山寨機」將是下一個山寨風潮。與Android社群合作開發Android系統,是山寨商近來特別感興趣的項目。
根據Androidin(中國本地最大Android社群)的說法,已經有幾家山寨商表示對Android智能手機的興趣,同時也希望能與中國本土Android社群合作,開發不同市場需求的軟體,並針對特定市場做銷售。這也正式開放手機平臺最大的優勢,根據客戶需求彈性並快速客製化軟體的「市場定向爆破」能力。
Android社群在大陸地區越活躍,相對的「Android山寨機」就更有機會。過去由晶片廠商提供完整山寨機軟硬體解決方案的模式,將會逐漸轉變為由社群提供Android山寨機軟硬體解決方案。軟體方面,就不需要多說了,以Androidin社群為例,其社群研發能量,以及社群的人員成份,都非常有實力。以硬體來說,社群需要的是開放式的硬體平臺,因為社群人員需要在此平臺上優化Linux核心,才能提出效能穩定的解決方案。
這樣的變化與市場機會,對台灣廠商來說是很好的轉型機會。若是山寨商接受了Android社群提出的解決方案,那麼品牌硬體就會是一個發展方向,因為在操作系統與軟體可以由使用者任意更新(更換)的情況之下,一個受社群、山寨商以及使用者信賴的手機裝置,就會具有相當的潛力。
在研發方面,硬體廠商確實需要即早建立Linux核心與驅動程式的研發能力。大陸地區有許多具備Linux核心開發能力的社群以及開發者。山寨機廠商的強項是在銷售以及通路,因此研發的工作則是落在晶片供應商,或是Android社群上,這就是大家所知道的「山寨機模式」。
與傳統山寨機相比,Android山寨機需要一些不同的元素,誰能掌握這些元素,誰就能逐鹿中原。

2009年4月20日 星期一

「Android Day Package -- Android 應用程式新手入門」

「Android Day Package -- Android 應用程式新手入門」整理了這陣子在研討會的演講材料,包含:
簡報一份
Android 入門教學文件共11集
範例程式4例
因為研討會是一天的演講活動,因此這些內容很適合新手做為「學習 Android 應用程式」的入門教材,大約只需要一天的時間,就能初步了解 Android 的開發工具使用,並了解 Android 的應用程式模式,故取名為「Android Day Package」,期望能提供一個「Android 新手一天入門」的教學套件。請不吝指教。
簡報的部份是受零組件雜誌邀請,進行一天的 Android 演講活動,所特別製作的簡報;範例則是參考 Android SDK 所撰寫的實例,範例是配搭簡報進行實例講解所使用的程式碼。[下載 Android Day Package] 後,可搭配以下共11份教學文件學習;以下的教學文件是為製作簡報時的筆記,特別整理成一份教學文件與大家分享。
課程主題
Android Day Package 提供以下的課程主題。
1. 開放手機平台發展現況 (1hr)‧開放手機平台陣營 ‧授權模式比較 ‧市場現況 ‧行銷與推廣策略
2. Android 入門 (1.5hr)‧安裝 SDK ‧Android模擬器 ‧Android開發工具 (ADT) ‧Android除錯工具 (ADB) ‧Hierarchy Viewer
3. Android應用程式模式 (2hr)‧Android Framework ‧Activity ‧Service ‧BroadcastReceiver ‧Process types ‧Views, ViewGroup ‧Design Screen ‧AndroidManifest.xml ‧Intents
4. Android應用程式開發 (1hr)‧Hello, Moko 範例程式 ‧Openmoko Neo FreeRunner手機安裝 ‧安裝 apk套件 ‧使用 Neo FreeRunner實機展示
Android 教學
2009.01.19:
Android 教學,#11: AndroidManifest.xml 的用途是什麼?
2009.01.19: Android 教學,#10: 如何檢查 Service 是否已啟動?使用 Android 除錯器
2009.01.12: Android 教學,#9: 啟動 Service - startService()
2009.01.12: Android 教學,#8: 沒有 UI 的 Service
2009.01.08: Android 教學,#7: 如何讓文字並排顯示 - TableLayout
2009.01.05: Android 教學,#6: WebView 體驗與 findViewByID
2009.01.04: Android 教學,#5: 使用 View 的 XML 屬性
2009.01.04: Android 教學,#4: 使用 XML 安排 UI
2008.12.29: Android 教學,#3: 第一個 Android 專案
2008.12.29: Android 教學,#2: “Hello Moko” - Activity 與 View 的關係
2008.12.29: Android 教學,#1: Android 應用程式模式