㈠ android app開發中常用到哪些開源框架
在前面的課程中,隨著對Android體系的了解,已經可以進行正常的Android應用開發了。在Android開發中,同其他工程開發一樣,也經常使用一些提高效率的框架,本文我們做一個對比。這些框架,既包括:網路請求框架、也包括圖片載入庫框架、還包括資料庫操作等一些框架,總之,了解和熟悉這些框架,會對自己的開發效率有很大的提升和幫助。
網路請求框架
1、okHttp
在前文的學習中,我們已經了解過okHttp,是一個常用的網路載入庫。
2、Retrofit
介紹
Retrofit是一個很不錯的網路請求庫,該庫是square開源的另外一個庫,之前的okhttp也是該公司開源的。
Retrofit是基於OkHttp封裝的RESTful網路請求框架,使用註解的方式配置請求。優點是速度快,使用註解,callback函數返回結果自動包裝成java對象。官方自己的介紹說:
A type-safe REST client for Android and Java
該網路框架在github上的地址如下:https://square.github.io/retrofit/
要求
Retrofit支持的http方式方式包括 GET/POST/PUT/DELETE/HEAD/PATCH,Retrofit要求Java的版本是1.8+,Android應用的API版本應該在21+。
依賴
使用Retrofit庫,和其他庫一樣,首先需要設置依賴,依然是在build.gradle文件中設置依賴:
//添加retrofit庫依賴
implementation 『com.squareup.retrofit2:retrofit:2.1.0』
//添加gson轉換器
implementation 『com.squareup.retrofit2:converter-gson:2.1.0』
使用
通過一個例子,我們可以來演示該框架的使用步驟:
1、定義請求介面,即程序中都需要什麼請求操作
public interface HttpServices {
/**
獲取頭條新聞
@param type 新聞類型
@param key apiKey
@return
*/
@GET(「toutiao/index」)
Call getNewsList(@Query(「type」) String type, @Query(「key」) String key);
}
2、實例化Retrofit對象,使用的Builder的模式創建,如下代碼所示:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_API)
.addConverterFactory(GsonConverterFactory.create())
.build();
注意,這里設置結構體轉換器,是可以直接把網路請求回來的數據轉換為Java結構體,這里設置的Gson解析器,因此要引入相應的轉換器支持庫。
3、得到介面對象,自己創建的全局的介面對象,並調用相應的介面,得到一個類似於請求Call對象。如下所示:
HttpServices httpServices = retrofit.create(HttpServices.class);
Call newsListCall = httpServices.getNewsList(「top」, Constants.API_KEY);
4、加入到請求隊列中,並設置回調方法:
newsListCall.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
//網路請求成功的回調方法
List list = Arrays.asList(response.body().result.data);
Log.i(「TAG」, 「請求成功:」 + String.valueOf(list.size()));
NewListAdapter adapter = new NewListAdapter(RetrofitActivity.this);
adapter.setmData(list);
mRecyclerView.setAdapter(adapter);
}
@Override
public void onFailure(Call call, Throwable throwable) {
//網路請求失敗的回調方法
Log.i(「TAG」, 「請求失敗:」 + throwable.getMessage());
}
});
其他界面操作和之前的Android中的內容一致。
3、RxJava
簡單來說,用來處理事件和非同步任務,在很多語言上都有實現,RxJava是Rx在Java上的實現。
原理
RxJava最基本的原理是基於觀察者模式來實現的。通過Obserable和Observer的機制,實現所謂響應式的編程體驗。
特點
RxJava在編程中的實現就是一種鏈式調用,做了哪些操作,誰在前誰在後非常直觀,邏輯清晰,代碼維護起來非常輕松。
RxJava也是一個在github上的庫,githubhttp://www.xingkongmj.com/news/id/62.html地址如下:https://github.com/ReactiveX/RxJava
基於此,還有一個RxAndroid,github地址如下:https://github.com/ReactiveX/RxAndroid
RxJava和RxAndroid的關系
RxAndroid是RxJava的一個針對Android平台的擴展,主要用於 Android 開發。
基本概念
RxJava 有四個基本概念:
Observable:可觀察者,即被觀察者Observer:觀察者subscribe:訂閱事件
這四個概念之間的邏輯關系是:Observable和Observer通過subscribe方法實現訂閱關系,從而Observable可以在需要的時候發出事件來通知Observer。
事件
RxJava 的事件回調方法主要包含以下幾個:
onNext:普通的事件onCompletedhttp://dachang.net/432717.html:事件隊列完結。RxJava 不僅把每個事件單獨處理,還會把它們看做一個隊列。RxJava 規定,當不會再有新的 onNext 發出時,需要觸發 onCompleted 方法作為標志。:事件隊列異常。在事件處理過程中出異常時, 會被觸發,同時隊列自動終止,不再允許再有事件發出。在一個正確運行的事件序列中, onCompleted和 有且只有一個,並且是事件序列中的最後一個。需要注意的是,onCompleted() 和 () 二者也是互斥的,即在隊列中調用了其中一個,就不應該再調用另一個。
資料庫操作框架
在開發時,本地資料庫可以起到緩存數據和存儲業務數據的作用,隨著技術的成熟,不斷推出了有很多關於資料庫的操作框架。比較常見的資料庫操作框架有諸如:GreenDao,OrmLite 和 ActiveAndroid,DBFlow等。
GreenDAO
GreenDAO是一個開源的 Android ORM(「對象/關系映射」),通過 ORM(稱為「對象/關系映射」),在我們資料庫開發過程中節省了開發時間!
GreenDao的官方文檔地址如下:http://www.xingkongmj.com/news/id/63.html
GreenDao的作用
通過 GreenDao,我們可以更快速的操作資料庫,我們可以使用簡單的面相對象的API來存儲,更新,刪除和查詢 Java 對象。這款資料庫操作框架的特點是:
高性能,在官方的統計數據中,GreenDao在GreenDao,OrmLite 和 ActiveAndroid三個框架中,讀、寫、更新操作效率均表現第一。易於使用的強大 API,涵蓋關系和連接。內存消耗較小。安全:greenDAO 支持 SQLCipherhttp://www.xingkongmj.com/news/id/64.html,以確保用戶的數據安全;
核心概念
GreenDao 的核心類有三個:分別是:
DaoMaster:保存資料庫對象(SQLiteDatabase)並管理特定模式的 DAO 類(而不是對象)。它有靜態方法來創建表或刪除它們。它的內部類 OpenHelper 和DevOpenHelper 是 SQLiteOpenHelper 實現,它們在 SQLite 資料庫中創建模式。DaoSession:管理特定模式的所有可用 DAO 對象,您可以使用其中一個getter方法獲取該對象。DaoSession 還提供了一些通用的持久性方法,如實體的插入,載入,更新,刷新和刪除。XXXDao:數據訪問對象(DAO)持久存在並查詢實體。對於每個實體,greenDAO 生成DAO。它具有比 DaoSession 更多的持久性方法。Entities:可持久化對象。通常, 實體對象代表一個資料庫行使用標准 Java 屬性(如一個POJO 或 JavaBean )。
使用
按照官方的文檔和github上的說明可以實現green的使用。
首先進行的是依賴,對於greenDao,有兩個地方需要設置,分別是項目根目錄中的 build.gradle,還有mole中的build.gradle。
classpath 『org.greenrobot:green-gradle-plugin:3.3.0』 // add plugin
在項目根目錄中的build.gradle目錄中寫這句話的意思是添加greenDao的插件。
在項目mole中的build.gradle中也需要進行配置,有兩個地方需要設置,如下圖所示:
apply plugin: 『org.greenrobot.greenhttp://www.xingkongmj.com/news/id/66.html』 //開頭加入該代碼
dependences{
implementation 『org.greenrobot:green:3.2.0』
}
然後就可以使用了。
bean實體
可以在項目中創建自己業務需要的實體類,並通過註解來設置是實體類,欄位約束等內容。然後點擊Android Studio中的Make mole,即可自動生成XXXDao代碼,以此來方便開發者的操作。生成的XXXDao類,不可修改和編輯,是自動生成的。
ORMLite
ORMLite框架是另外一款Android開發中可以使用的資料庫操作框架。該框架的文檔地址如下:https://ormlite.com/sqlite_java_android_orm.shtml
該框架的文檔准備的不是特別友好,此處不再贅述。
總結,所有的框架原理幾乎都相差不大,只是操作有所差異。
視圖注入框架
在Android項目開發過程中,有太多的頁面需要布局完成,同時在代碼中需要些大量的findviewbyid的操作,來實現控制項的解析。於是就有人想能否輕松一些,解放雙手節省時間,干一些其他有意義的事情,於是ButterKnife就來了。
ButterKnife是一個專注於Android系統的View注入框架,可以減少大量的findViewById以及setOnClickListener代碼,可視化一鍵生成。
該項目在github上的地址如下:http://www.xingkongmj.com/news/id/65.html
這個框架的優勢也非常明顯:
強大的View綁定和Click事件處理功能,簡化代碼,提升開發效率方便的處理Adapter里的ViewHolder綁定問題運行時不會影響APP效率,使用配置方便代碼清晰,可讀性強
使用
首先是設置依賴,在build.gradlehttp://dachang.net/432714.html中進行依賴設置:
implementation 『com.jakewharton:butterknife:10.2.1』
annotationProcessor 『com.jakewharton:butterknife-compiler:10.2.1』
需要注意,該框架要求Java環境1.8版本以上,SDK版本在26以上,因此在使用到的mole中的build.graldle文件中,還必須添加如下代碼配置:
apply plugin: 『com.jakewharton.butterknife』
android{
//…
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
//…
}
另外,還必須在項目根目錄中的build.gradle文件中,添加該框架的插件,如下圖所示:
dependences{
classpath 『com.jakewharton:butterknife-gradle-plugin:10.2.1』
}
然後即可在代碼中進行使用了。
在使用該框架的頁面進行綁定諸如,如下所示代碼:
ButterKnife.bind( this) ;
主要的功能
@BindView():控制項id 註解,解放雙手,不用再每個控制項都寫一遍findviewById@BindViews():多個控制項id 的註解,括弧內使用花括弧包括多個id即可,中間用,分割開在Fragment中使用,綁定Fragment。@BindString():綁定字元串@BindArray:綁定數組@BindBitmap:綁定bitmap資源@OnClick、@OnLongClick:綁定點擊事件和長按事件…還有很多
插件安裝
如果是頁面很復雜,一個一個寫BindView也很費勁,在Android Studio中,可以安裝一個ButterKnife的插件,安裝該插件後,可以在Studio中直接將對應的布局中的所有控制項均給自動生成。
注意,在進行自動生成時,滑鼠要放在布局文件上。
注意事項
ButterKnife框架在使用時,要求的版本比較高,包括Java的版本也有限制。因此,如果計劃在項目中使用,要提前做好預備工作,以防止對已有項目和業務帶來不必要的麻煩,反而影響工作進度。
㈡ 蘋果手機上反差暖色濾鏡,安卓手機叫什麼
Android手機上的反跡猛差暖色濾鏡也稱為「顏色校正濾鏡」或「暖色調濾鏡」,它可以改變圖像的色調,使其看起來更溫暖。這種腔州察濾鏡可以在Android手機上通過使用特定的應用來實現,比如Snapseed,VSCO,Instagram等應用伍茄。這些應用提供了多種不同的反差暖色濾鏡,用戶可以根據自己的喜好選擇和使用。使用這種濾鏡後,圖像會變得更加溫暖,並且可以增強色彩的飽和度,使圖像看起來更加生動和清晰。
㈢ 安卓11正式發布,迎來重大升級,國產晶元巨頭率先完成部署
安卓和蘋果系統分別是全球兩大智能手機操作系統,兩大操作系統有很大的不同,同時也有各自的優勢。和蘋果系統不同的是,安卓系統是向全世界開源底層代碼的,所以除了蘋果系統以外,大家使用的國產手機都是安卓系統。
就算是華為的EMUI也是基於安卓系統開發,安卓系統的優勢在於用戶廣,生態龐大。但同時也因為開源的影響,讓安卓系統存在一定的安全風險,未經過系統應用商店審核的危險軟體,也能夠順利安裝。
這容易導致用戶的隱私,財產畝賀受到損失。被曝出各種應用軟體隱私泄迅滾派露的事件,多半都是來自於安卓系統。安卓的版本更新迭代是掌握在谷歌公司手中的,雖然安卓是開源的,但掌控權還是在谷歌手裡。
目前國內的安卓系統一般是9版本,就在9月9日,谷歌已經將安卓系統版本更新到11了。在Pixel系列就能夠提供給用戶下載更新。這次更新的速度非常快,做到了秒級推送。
但是國內的手機系統廠商什麼時候適配到安卓11,估計還需要一段時間的等待。因為適配系統也是不小的工作量,從軟體應用到硬體設備等等,都需要進行相應的升級。
Android 11發布的升級也預示著國內版本以後會進行相應的推送,這次安卓11版本的更新可以說是有人歡喜有人愁。
Android 11正式發布,在很多方面都有了較大改進。早在8月份的時候,就有透露相關信息。其中有一點的更新對各大相機應用廠商是一個不小的打擊。
因為谷歌為了加強對隱私的管理,不允許第三方應用軟體調取相機許可權,只能使用系統相機。什麼意思呢?意思就是包括帶有美顏,濾鏡等功能的第三方應用軟體不能使用它們的濾鏡,美顏特效。
喜歡自拍的人都知道,有些軟體是可以利用它們的功能打開相機,從而添加特效,濾鏡等等。現在安卓11版本限制調用,結果可想而知,估計會有一大批相機軟體面臨倒下。
谷歌給出的解釋是加強用戶隱私管理,這么做也是為了避免某些相機軟體在暗中調用攝像頭,竊取用戶隱私。所以說有人歡喜有人愁,用戶隱私得到了保障,自然是有人歡喜,平時不愛拍照的人也不在乎什麼濾鏡,特效。
Android 11迎來重大升級,主要在隱私、許可權控制、用戶三大模塊進行調整,這也是核心關鍵升級。包括用戶的許可權比什麼都重要,同時為了加強用戶體驗,還重新設計消息通知界面。
流暢性、智能化、操作體驗都有一定的改善,等國內的廠商和應用開發商進行適配的時候,才算是真正感受了具體的Android 11版本。不進行適配的話,很多功能是沒辦法配合Android 11使用的。
在這一點上,國產晶元巨頭率先完成部署。
這家國產晶元巨頭也是具有不錯實力的,它就是紫光展銳。和國內眾多晶元企業一樣,紫光展銳是IC晶元設計公司,代表系列產品有虎賁。
紫光展銳同步參與了Android 11系統的開發,所以有六款智能手機晶元升級到了Android 11。
作為國內頂級的晶元系統廠商,紫光展銳的智能手機平台和Android 11會進行同步商用。為用戶提供更好的智能體驗。
紫光率先完成部署,接下來就需要更多的廠商跟進,在將安卓版本更新到11之前,國內的軟體和硬體廠商都需要進行相應的適配處理。這次紫光的率先部署,可能會成為將來系統廠商採用的解決方案。
有了先手優勢以後,市場就有了話語權,配合Android 11的商用,說不定紫光展銳也能提高知名度,以及國內市場地位。
隨著谷歌Android 11的發布,蘋果新手機也快要迎來新品上市。盡管是兩大完全不同的產品,但有時候誰的系統做得更出色,備祥更流暢,更安全用戶就會選擇哪一種。所以蘋果肯定也不會停止對系統的迭代,後續肯定還會上新更多功能。
相信新版本的發布,會改變國內軟體和硬體市場的現狀。安卓11已經在國外發布,國內用戶想要體驗,就要耐心等待了。
㈣ 怎麼在github上開源ios代碼
1. AFNetworking 在眾多iOS開源項目中,AFNetworking可以稱得上是最受開發者歡迎的庫項目。AFNetworking是一個輕量級的iOS、Mac OS X網路通信類庫,現在是GitHub上第三大Objective-C庫。它建立在NSURLConnection、NSOperation等類庫的基礎上,讓很多網路通信功能的實現變得十分簡單,因此,許多iOS應用開發都會使用到它。 支持HTTP請求和基於REST的網路服務(包括GET、POST、PUT、DELETE等); 支持ARC; 要求iOS 5.0及以上版本; 有一些插件擴展已有的功能,還有一個功能齊全的API; 從URL中獲取JSON特別簡單。 2. Three20 Three20原本是iPhone版Facebook中所使用的工具庫,包括照片查看器等一系列的iPhone UI類集,以及HTTP磁碟緩存等一些通用工具。後來從Facebook iPhone應用中剝離出來,成為了一個深受開發者喜愛的通用框架。 3. facebook-ios-sdk 此前在“GitHub上最受歡迎的開源項目”Android系列文章(一)中,我們曾介紹過允許開發者將Facebook集成到Android應用中的Facebook SDK for Android。Facebook SDK for iOS和它一樣,可以讓開發者將Facebook相關功能集成到自己的iOS App中。 Facebook無疑是最成功的SNS社區,如果能夠讓App具有與Facebook集成的功能,那勢必會帶來非常好的效果。Facebook SDK for iOS項目更新頻率很高,想要獲取更多關於示例、文檔、將SDK集成到App中、源代碼等信息,可直接登陸Facebook Developers查看。 4. RestKit Restkit是一個主要用於iOS上網路通信的開源Objective-C框架,除了發送請求、接受響應這些基本功能外,還附帶Core Data,以及將遠程JSON映射為本地對象的功能。 主要特點: 可在iOS和Mac OS X的Objective-C中與RESTful Web服務進行簡單交互; 包含簡單的HTTP Request/Response API; 帶有強大的對象映射系統,用於減少代碼長度; RestKit可降低JSON/XML的處理的資源消耗,支持通過SBJSON和YAJL進行JSON解析。 5. asi-http-request ASIHTTPRequest是一款極其強勁的HTTP訪問開源項目,能夠讓簡單的API完成非常復雜的功能,比如非同步請求、隊列請求、GZIP壓縮、緩存、斷點續傳、進度跟蹤、上傳文件、HTTP認證。 ASIHTTPRequest適用於基本的HTTP請求,和基於REST的服務之間的交互。使用Objective-C編寫,能夠同時用於Mac OS X和iPhone應用中。 6. cocos2d-x 在《GitHub上最火的40個Android開源項目(一)》中,我們已經非常詳細地介紹了cocos2d-x開源項目。cocos2d-x支持iOS、Android、Windows Phone 8、Bada、BlackBerry、Marmalade、Windows、Linux等多個平台。 7.cocos2d-iphone(cocos2d) cocos2d for iPhone是一個開源框架,用於為iPod Touch、iPhone、iPad及Mac OS X構建2D游戲、演示程序及其他圖形互動式應用。基於cocos2d設計,使用相同的API,但不同於cocos2d使用Python,cocos2d for iPhone是使用Objective-C實現的。 cocos2d for iPhone主要特性: 快 免費 易於使用 社區支持 8.cocos2d-iphone(jpsarda) 該項目是對cocos2d for iPhone的擴展。 9. GPUImage GPUImage是一個基於GPU圖像和視頻處理的開源iOS框架。 主要功能如下: 提供各種各樣的圖像處理濾鏡,並且支持照相機和攝像機的實時濾鏡; GPUImage顧名思義,是基於GPU的圖像加速,因此圖像處理速度非常快,並且能夠自定義圖像濾鏡; 支持ARC。 10. MonoGame MonoGame是一個Microsoft XNA 4.x Framework的開源跨平台實現。此前在Android開源項目系列文章(一)中我們也進行了詳細的介紹。 MonoGame支持平台: iOS(包括Ritina Display) Android Windows(OpenGL) Mac OS X Linux Windows Store Apps(Windows 8、Windows RT) Windows Phone 8 PlayStation Mobile(目前僅支持2D) OUYA 11. Nimbus Nimbus是一個開源的iOS框架,比起Three20,Nimbus的文檔更為全面、豐富,能夠實現很多非常炫的界面特效。因此,開發者可以藉助Nimbus來降低項目設計的復雜度。 12. cheddar-ios Cheddar是一個簡單即時的任務管理器,Cheddar for iOS是Cheddar的iOS客戶端,通用於iPhone和iPad。 13. ViewDeck IIViewDeckController能夠實現類似於Path 2.0 的視圖左右滑動的效果,支持向左或向右順滑的滑動操作。 14. ShareKit ShareKit是iPhone開發的第三方介面,允許你一鍵分享文字、圖片、網址、文件等內容到Facebook、Twitter、Delicious、Tumblr、Google Reader等第三方網站上。 15. GMGridView GMGridView是一款開源的iOS(iPhone/iPad)表格視圖,允許用戶手勢對表格單元進行排序,在單元格需要展示時才進行裝載,這樣極大地提高了表格的效率。其中的伸縮/旋轉/平移手勢能夠讓用戶改變視圖,還能夠實現從CellView到全屏的切換。 16. QuickDialog QuickDialog可以幫助開發者快速創建復雜的表單,實現包括登錄界面在內的各種樣式的TableView輸入界面,此外,還可以創建帶有多個文本域的表格及項目。 17. appirater Appirater是一個可以直接使用到任何iPhone應用(iOS4.0及以上)中的開源類,用於提醒用戶在打開App時,對應用進行或打分。 18. SVProgressHUD SVProgressHUD能夠實現多種HUD效果,多用於程序正在執行耗時較長的任務,需要用戶等待。除了顯示等待的HUD,還可以顯示命令執行成功或者失敗的HUD。 19. Reader 該項目能夠讓iOS開發者輕而易舉地在iOS設備屏幕上顯示PDF文件。代碼通用,不需要任何XIB(因為所有UI元素都是代碼生成的,具有極大的靈活性),運行於iOS 4.0及其以上版本設備中,同時還支持所有Retina Display設備。 支持: 諸如iBooks等的文檔導航; 設備全方位旋轉; 對PDF進行加密(密碼保護); PDF鏈接(URI及跳轉頁面); PDF旋轉頁面。 20.CocoaAsyncSocket CocoaAsyncSocket提供了十分強大而又易用的Mac OS X及iOS非同步套接庫,支持TCP和UDP,其中,AsyncSocket類是支持TCP的,AsyncUdpSocket是支持UDP的。 AsyncSocket是封裝了CFSocket和CFSteam的TCP/IP socket網路庫,提供非同步操作。AsyncUdpSocket是UDP/IP socket網路庫,包裝自CFSocket。
㈤ 有誰做過android 的GPUImage 組合濾鏡
GPUImage 是iOS下一個開源的基於GPU的圖像處理庫,提供各種各樣的圖像處理濾鏡,並且支持照相機和攝像機的實時濾鏡。GPUImage for Android是它在Android下的實現,同樣也是開源的,託管在Github上。
版本:android-gpuimage-1.1.1
Android模擬器上不支持OpenGL ES 2.0所以會報錯,可以選用Genymotion測試,或真機上運行。
引用
Caused by: java.lang.IllegalStateException: OpenGL ES 2.0 is not supported on this phone.
(1)使用自定義的ImageView
Xml代碼
<jp.co.cyberagent.android.gpuimage.GPUImageView
android:id="@+id/gpuimage"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="1" />
Java代碼
mImageView.setFilter(new GPUImageSepiaFilter()); // sepia
mImageView.setFilter(new GPUImageGrayscaleFilter()); // gray
mImageView.setFilter(new GPUImageSharpenFilter()); // sharp
mImageView.setFilter(new GPUImageSobelEdgeDetection()); // edge
㈥ Android OpenGL ES(四)-為平面圖添加濾鏡
上一章載入圖片的過程,在這里就不做贅述。
之前我們通過YUV數據格式的處理知道,只要保留Y的數據,就是灰度的圖片。但是OpenGL中處理的是RGB格式的數據,我們要如何去取得灰度圖呢?
我們可以通過公式,計算出新的RGB值,就是灰度的圖片了。
我們的目標已經確定。下面我們需要將片段著色器上的每個像素的RGB值,通過上面的公式計算,裝換成我們的灰度值。
根據上面的思路,我們需要去改片元著色器。 texture_fragment_shader.glsl
對比之前的,需要是有如下的修改點:
按照之前的想法,我們需要將我們的公式中的系數傳遞進入,就可以完成我們的操作了。基於之前的認識,我們知道傳遞我們的屬性 uniform 給OpenGL的都是通過創建數組,綁定屬性,這一套流程。
與上面的黑白色的處理相似,冷色調的處理就是單一增加藍色通道的值,暖色調的處理可以增加紅綠通道的值。
不管是冷色還是暖色。每個像素的顏色都和我們傳入的色值相加,產生偏置之後的顏色。同時還要確保顏色的值合法。如果超過最大,或者小於最小,就用極限值表示。
還是之前的套路。
紅黃通道增加的結果
藍色通道增加的結果
圖片模糊處理相對上面的色調處理稍微復雜一點,通常圖片模糊處理是採集周邊多個點,
然後利用這些點的色彩和這個點自身的色彩進行計算,得到一個新的色彩值作為目標色彩。
模糊處理有很多演算法,類似高斯模糊、徑向模糊等等。
最常用的還是高斯模糊。先看一下高斯模糊的原理。
使用正態分布作為權重分配模式,對周圍像素取平均值的方式,就是高斯模糊。
在圖形上,正態分布是一種鍾形曲線,越接近中心,取值越大,越遠離中心,取值越小。
計算平均值的時候,我們只需要將"中心點"作為原點,其他點按照其在正態曲線上的位置,分配權重,就可以得到一個加權平均值。
上面的正態分布是一維的,圖像都是二維的,所以我們需要二維的正態分布。
二維高斯函數:
有了這個函數 ,就可以計算每個點的權重了。
為了計算權重矩陣,需要設定σ的值。假定σ=1.5,則 模糊半徑為1 的權重矩陣,權重之和等於1,得到最終的權重矩陣。
對所有點重復這個過程,就得到了高斯模糊後的圖像。如果原圖是彩色圖片,可以對RGB三個通道分別做高斯模糊。
如果一個點處於邊界,周邊沒有足夠的點,怎麼耐兄襲辦?
一個變通方法,就是昌兄把已有的點拷貝到另一面的對應位置塵禪,模擬出完整的矩陣。
上面著色器。我們是計算好了卷積核,直接在 shader 內寫死應用的。
這一小節的內容耗時比較長。其實就是利用OpenGL的shader對圖像進行簡單的濾鏡處理。
從這節我們學習到
下一章,會回到Android的內容。將OpenGl和Camera結合在一起。通過OpenGl來顯示一個預覽的畫面。
㈦ 安卓手機中有哪些比較好玩的軟體推薦
首選的就是王者榮耀了,時下最熱門的游戲之一,可玩性高,無聊的時候可以玩一下。再比如支付寶、微信了,都是很受年輕人的喜愛,出門買東西都不需要帶錢了,直接手機支付也是非常方便的。
㈧ Android OpenGLES 實時美顏(磨皮)的優化(二)
在前一篇文章 Android OpenGLES 實時美顏(磨皮)的優化 ,我們已經介紹了關於實時美顏(磨皮)的一些優化點。但在實際的優化測試中發現,當處理器發熱之後,就無法保證預覽幀率了,主要還是高斯模糊處理的數據量比較大導致。因此,我們需要尋找新的磨皮余鉛方法豎早好。
目前市面上關於磨皮方法有好多種,使用PS磨皮經常用到的方法包括高反差保留、高低頻、中性灰以及雙線性等。其中中性灰和雙線性的效率一般,因此,我們從高反差保留、高低頻這兩種方法中選擇。這里選擇使用高反差保留法做磨皮處理,PS中的高反差保留法進行磨皮,隨手一搜便能找到很多文章,比如:
https://jingyan..com/article/455a99504d568fa1662778d6.html
接下來,我們嘗試著實現文章中講到的過程。
關於高斯模糊的優化,可以參考本人的文章:
OpenGLES濾鏡開發匯總 —— 高斯模糊實現以及優化
對於人像進行高斯模糊,我們設計一個11x11的高斯運算元對圖像進行高斯模糊,shader如下:
vertex shader :
fragment shader:
經過以上的shader進行高斯模糊處理之後,我們得到這樣一張高斯模糊圖像:
在PS的高反差保留磨皮方睜並法中,高反差保留磨皮混合採用的是強光模式,計算公式為:color = 2 * color1 * color2。因此,我們設計出這樣一個高通濾波器,其shader如下:
fragment shader:
經過高通濾波器之後,我們得到這樣一個紋理圖像:
可以看到,經過三通道強光混合處理後,痘印、邊沿等地方都清晰起來了。強光的程度,一般是3的倍數,這里取24倍。
到這一步,其實我們已經得到了需要過濾顏色值,但在這一張圖中,也把邊沿的顏色差值包含進來了。我們接下來需要過濾掉邊沿的顏色差值。這樣在後續的處理中,我們可以保留邊沿的細節不被模糊掉。因此接下來,我們需要將經過高通濾波得到的紋理,再做一次高斯模糊。不過這一次不能11 x11 這么大的高斯運算元,我們選擇一個 5 x 5 大小的高斯運算元。高斯模糊的shader 如下:
vertex shader:
fragment shader:
將高通濾波器得到的紋理,經過高斯模糊處理後,得到這樣一張紋理:
對比高通濾波器處理後的紋理,邊沿細節變得模糊了,而且,需要過濾的顏色差值仍舊保留著。到這一步,我們就得到了做磨皮處理的前置紋理。接下來就是高反差保留磨皮的最後也是最重要的一步。
經過前面的處理,我們得到一張輸入圖片的高斯模糊紋理,以及一張高反差保留的高斯模糊紋理。我們使用這兩張紋理,通過比較藍色通道,計算出需要磨皮的實際強度值,與原圖進行混合處理,然後輸出最終的紋理。shader如下所示:
經過上面的處理之後,我們就得到磨皮處理的結果如下:
可以看到,經過高反差保留磨皮後的結果,磨皮效果還不錯,而且720P磨皮處理時,在高通驍龍625處理器上,經過高反差保留磨皮之後,預覽幀率能夠保持在30FPS左右。我們可以看到,邊沿細節還是不夠明顯,所以,我們可以使用USM銳化增強邊沿細節部分。這篇文章就不講解USM銳化的實現了。
詳細實現過程,可以參考本人的開源相機項目:
CainCamera
CainCamera的FilterLibrary中有經過優化後的實時美顏(磨皮)實現。
㈨ 有沒有拍照濾鏡的第三方SDK
微軟貌似沒有提供這樣的功能,DirectX的sdk應該可以直接加入msdn的,而且不需要用戶手動添加,比如我安裝了ddk,MSDN里就自動加入了DDK的文檔