Android中怎么調(diào)用skia函數(shù)

這篇文章將為大家詳細(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)

成都定制網(wǎng)站建設(shè)