欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中利用C++處理Bitmap對(duì)象的實(shí)現(xiàn)方法

 更新時(shí)間:2017年03月10日 10:01:32   投稿:jingxian  
下面小編就為大家?guī)硪黄狝ndroid中利用C++處理Bitmap對(duì)象的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

相信有些Android&圖像算法開發(fā)者和我一樣,遇到過這樣的狀況:要對(duì)Bitmap對(duì)象做一些密集計(jì)算(例如逐像素的濾波),但是在java層寫循環(huán)代碼來逐像素操作明顯是不現(xiàn)實(shí)的,因?yàn)镴ava代碼的運(yùn)行速度太慢,而一副很小的240*320圖像就有76800個(gè)像素,如果考慮到RGB三通道(或者ARGB四通道),還要對(duì)這個(gè)數(shù)量乘以3/4。因此對(duì)圖像的密集計(jì)算一般都利用Jni接口,用C++實(shí)現(xiàn)。那么問題來了,怎么把Bitmap中的像素?cái)?shù)據(jù)從Java層傳到C++層?

做法1:之前的做法

我之前的做法是這樣的,因?yàn)锽itmap類不支持直接獲取像素?cái)?shù)據(jù),因此我利用copyPixelsToBuffer函數(shù)將像素?cái)?shù)據(jù)復(fù)制到一塊buffer中,再將buffer數(shù)據(jù)傳到C++層中做處理,處理完成后,再使用copyPixelsFromBuffer函數(shù)將處理完的像素?cái)?shù)據(jù)賦給Bitmap對(duì)象。這種方法的缺點(diǎn)是,需要額外申請一塊幾乎和當(dāng)前圖像等大的內(nèi)存塊作為buffer,還要增加兩次額外的復(fù)制操作。本來我們利用C++處理像素的目的就是節(jié)省時(shí)間,現(xiàn)在額外的需求使得時(shí)間和空間復(fù)雜度都增加了,可見,這種方式并不經(jīng)濟(jì)實(shí)惠。

做法2:現(xiàn)在的做法

其實(shí),Android的NDK可以在一定程度上處理從Java層傳過來的Bitmap對(duì)象,可以將Bitmap對(duì)象傳到C++層,直接獲取其中的像素?cái)?shù)據(jù)指針,做進(jìn)一步處理。步驟如下:

a.編寫JNI接口函數(shù)

//java接口函數(shù)
private static native int processBitmap(Bitmap bitmap);
//對(duì)應(yīng)C++函數(shù)
JNIEXPORT jint JNICALL Java_com_example_test_nativeprocess_processBitmap
(JNIEnv *env, jclass,jobject bmpObj);

b.添加#include<android/bitmap.h>語句

#include<android/bitmap.h>

c.獲取像素?cái)?shù)據(jù)指針,進(jìn)行操作

AndroidBitmapInfo bmpInfo={0};
  if(AndroidBitmap_getInfo(env,bmpObj,&bmpInfo)<0)
  {return -1}
  int* dataFromBmp=NULL;
  if(AndroidBitmap_lockPixels(env,bmpObj,(void**)&dataFromBmp))
  {return -1;}

AndroidBitmap_lockPixels用來獲取數(shù)據(jù)指針,數(shù)據(jù)指針的參數(shù)類型是(void**),因?yàn)锳ndroid中的Bitmap一般存放的是ARGB格式,如果需要的是像素,可以用int*指針,如果需要的是通道,可以用unsigned char*。

d.操作完畢,釋放指針

AndroidBitmap_unlockPixels(env,bmpObj);

這樣,不需要做任何復(fù)制操作,就可以直接操作Bitmap中的像素?cái)?shù)據(jù)。

3.其他問題

如果需要在C++層創(chuàng)建Bitmap對(duì)象,再返回到Java層,這種需求我還沒找到具體的實(shí)現(xiàn)方法,如果有人知道,請不吝指點(diǎn)

以上這篇Android中利用C++處理Bitmap對(duì)象的實(shí)現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論