這篇文章將為大家詳細(xì)講解有關(guān)Android中怎么調(diào)用skia函數(shù),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
專注于為中小企業(yè)提供網(wǎng)站設(shè)計制作、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)旺蒼免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
1、建立完整的android開發(fā)環(huán)境,JAVA層的環(huán)境SDK、JDK、eclipse都要裝,C&C++層的環(huán)境NDK、cygwin、git也都要裝好。
2、下載完整的skia代碼,代碼自己到google上搜吧(重要提示:wiki,TortoiseSVN)
3、通過git下載android源碼:xxxx/core,xxxx/base,xxxx/skia三個文件夾就夠了。(找到android源碼git文件的下載列表,搜索頁面就可以了,都下載,都下載?。。?/p>
4、編譯skia文件夾,獲得skia對應(yīng)的so文件。
4.1 如果你的skia文件夾來自skia官網(wǎng),那就看看目錄下的config文件,編寫你的make.out文件,之后編譯,出錯,再編譯,再出錯。。。是因為缺少頭文件,對吧?,這些頭文件與硬件或圖像編碼有關(guān),比如說atomic.h啊png.h啊什么的。找吧?。⊙a(bǔ)上??!還是報錯的話,就是因為還缺少某些定義,報錯一大推“undeclared”,找不到就只能自己寫,當(dāng)然前提是你對你的開發(fā)板足夠熟悉,比如skia要求mutex的申明,并實現(xiàn)這個自旋鎖的占用和釋放接口。(本步驟可以省略)
4.2 在ndk文件夾里搜索,獲得libskia.so, libskiagl.so, libjnigraphics.so
5、新建項目文件夾,把第三步的core,base,skia三個文件夾扔進(jìn)去。在項目文件夾里新建個lib文件夾,把第四步生成的so文件扔到lib里。新建jni文件夾,在jni里編寫你的cpp文件。(重要提示:你可以不仔細(xì)看我寫的東西,但如果你是在沒有仔細(xì)看NDK自帶doc文件夾里那十幾篇英文參考的情況下這么做,那你一定會生不如死的)
6、搜索skia文件,找到skcanvas.h,看看我們能用skia干什么。和android相比,skia的自述文件儼然像是個天使。不理解什么是天使?請參看android NDK下的文檔。
7、以畫畫寫字為例,我的cpp文件如下:
#include <jni.h> #include <time.h> #include <android\log.h> #include <android\bitmap.h> #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #include "SkBitmap.h" #include "SkDevice.h" #include "SkPaint.h" #include "SkRect.h" #include "SkImageEncoder.h" extern "C" { JNIEXPORT jint JNICALL Java_JNItestForGraph_JNItestForGraph_TestBackView_changeback (JNIEnv * env, jobject obj, jobject bitmap, jint time); } JNIEXPORT jint JNICALL Java_JNItestForGraph_JNItestForGraph_TestBackView_changeback (JNIEnv * env, jobject obj, jobject bitmap, jint time) { AndroidBitmapInfo info; int* pixels; int ret; ret = AndroidBitmap_getInfo(env, bitmap, &info); ret = AndroidBitmap_lockPixels(env, bitmap, (void**)&pixels); int width=(int)info.width; int height=(int)info.height; SkBitmap bmp = SkBitmap(); bmp.setConfig(SkBitmap::kARGB_8888_Config,width,height,0); bmp.setPixels((void*)pixels); SkCanvas backgroud(bmp); SkPaint paint; paint.setARGB(255, 255, 0, 0); SkRect r; r.set(25, 25, 145, 145); backgroud.drawRect(r, paint); AndroidBitmap_unlockPixels(env, bitmap); backgroud.drawRect(r, paint); paint.setARGB(255, 0, 255, 0); r.offset(20, 20); backgroud.drawRect(r, paint); paint.setARGB(255, 0, 0, 255); r.offset(20, 20); backgroud.drawRect(r, paint); paint.setARGB(255, 0, 0, 0); backgroud.drawText("ABCD", 4*sizeof(char), 0, 100 , paint); return (ret); }
(重要提示:文件名的命名很有講究,網(wǎng)上搜搜NDK native C或好好看看NDK自述文檔HOWTO.TXT)
8、編寫android.mk和appliction文件,具體怎么寫,直接拷貝NDK下sample里的同名文件,再修改一下就可以了。具體怎么改。。。兄弟!不是我蒙你,還是看看NDK下的自述文檔吧,我收回在第5步所說的話。用NDK文件夾下的ndk-build編譯,根據(jù)出錯信息關(guān)聯(lián)所需頭文件,都在你之前下載的幾個文件夾里了,真的。編譯成功,會在lib文件夾得到新的so文件。(重要提示:mk文件中記得帶上-lskia,-lskiagl,-ljnigraphics)
9、編寫JAVA程序調(diào)用上面的函數(shù)。該怎么寫呢? 打開eclipse,新建工程,在程序中先Loadlibrary,再native C申明,具體。。。網(wǎng)上搜吧,要么就看看NDK下面sample里隨便哪個例子,那個plasma就不錯
10、運(yùn)行ecplise里的項目,之前先看看有沒有把so文件放到項目所在地的lib中。
11、下載到真機(jī)上運(yùn)行,較低版本的機(jī)器,會缺少libjnipraphics.so庫,需要在apk中添加。
關(guān)于Android中怎么調(diào)用skia函數(shù)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
網(wǎng)頁題目:Android中怎么調(diào)用skia函數(shù)
文章URL:http://muchs.cn/article0/gpppio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、關(guān)鍵詞優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、微信小程序、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)