日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android RenderScript 关于Compute 的使用

發(fā)布時間:2025/3/15 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android RenderScript 关于Compute 的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ?RenderScript 不僅可以用來畫圖,而且可以用來做密集的計算操作。目前的API可以使用到的是利用CPU的核心優(yōu)勢來幫我們做計算。在未來,可能會包括GPU和DSP處理器上做精密計算。

創(chuàng)建一個Compute ?的RenderScript

? ?下面有一張圖詳細的介紹了勾劃了一個Compute 的 RenderScript:

?

圖解:Andriod 有一個RenderScript Compute 的引擎來支持做精密計算,后期google 會不斷擴展這個引擎讓其支持更多的精密計算如上面提到的GPU、DSP等等,創(chuàng)建Compute RenderScript 同樣的也必須寫一個.rs 文件,做運行時生成對象讀取調用。之后在Android 上層實現(xiàn)計算功能。另,(必須顯示在應用上調用forEach_root或者在RenderScript 運行時運件中.rs,調用rsForEach(),Compute 才會自動調用硬件支持核心來計算) .

?

?參照DEMO

  • ?在上層調用forEach_root 計算的DEMO
  • 在RenderScript 運行時調用rsForEach計算的DEMO
  • ?

    其實,兩個DEMO都實現(xiàn)了同一樣的功能,就是將一張圖片使用濾鏡效果將其變顏色RGB值變成灰塵色,而另一張則原樣顯示,該DEMO參考了SDK中的HelloWorldCompute DEMO,而唯一與SDK中不一樣的地方是在:SDK是在于上層調用forEach_root方法進行計算,而我使用的是在.rs 中調用rsForEach方法進行計算。兩者功能相同,實現(xiàn)效果不一樣而已。

    ?

    ?在上層調用forEach_root 計算的DEMO

    區(qū)別的代碼在于:?

    SDK DEMO?

    .rs文件 :

    #pragma?version(1)
    #pragma?rs?java_package_name(com.example.android.rs.hellocompute)

    const?static?float3?gMonoMult?=?{0.299f,?0.587f,?0.114f};

    void?root(const?uchar4?*v_in,?uchar4?*v_out)?{
    ????float4?f4?=?rsUnpackColor8888(*v_in);

    ????float3?mono?=?dot(f4.rgb,?gMonoMult);
    ????//dot:[0]*[0]+[1]*[1]+[2]*[2]
    ????*v_out?=?rsPackColorTo8888(mono);
    }?

    ?createScript方法:

    private?void?createScript()?{
    ????????mRS?=?RenderScript.create(this);
    ????????

    ????????mInAllocation?=?Allocation.createFromBitmap(mRS,?mBitmapIn,
    ????????????????????????????????????????????????????Allocation.MipmapControl.MIPMAP_NONE,
    ????????????????????????????????????????????????????Allocation.USAGE_SCRIPT);
    ????????mOutAllocation?=?Allocation.createTyped(mRS,?mInAllocation.getType());

    ????????mScript?=?new?ScriptC_mono(mRS,?getResources(),?R.raw.mono);

    ????????mScript.forEach_root(mInAllocation,?mOutAllocation);//通知RenderScript Compute Runtime?
    ????????mOutAllocation.copyTo(mBitmapOut);
    ? ? }?

    ?

    ?在RenderScript 運行時調用rsForEach計算的DEMO

    ?.rs文件:

    #pragma?version(1)
    #pragma?rs?java_package_name(com.xuzhi.renderScriptCompute)

    rs_allocation?gIn;
    rs_allocation?gOut;

    rs_script?gScript;?

    const?static?float3?gMonoMult={0.299f,0.587f,0.114f};

    void?root(const?uchar4?*v_in,?uchar4?*v_out,?const?void?*usrData,?uint32_t?x,?uint32_t?y){

    //將一個uchar4?的顏色解壓為float4
    ????float4?f4=rsUnpackColor8888(*v_in);
    ????
    ????//dot:[0]*[0]+[1]*[1]+[2]*[2]
    ????float3?mono=dot(f4.rgb,gMonoMult);
    ????//打包uchar4,alpha?默認為1.0
    ????*v_out=rsPackColorTo8888(mono);
    ????
    }

    void?filter(){
    //調用RenderScript?進行處理(操作輸入的圖片然后把處理的結果放到輸出結果中),最后把處理完的數(shù)據存回bitmap?,在ImageView顯示出來
    ?????rsForEach(gScript,?gIn,?gOut);
    }?

    ?createScript方法:

    private?void?createScript()?{
    ????????mRS?=?RenderScript.create(this);
    ????????//從一個bitmap?創(chuàng)建一個allocation
    ????????mInAllocation?=?Allocation.createFromBitmap(mRS,?mBitmapIn,
    ????????????????Allocation.MipmapControl.MIPMAP_NONE,?Allocation.USAGE_SCRIPT);
    ????????
    ????????mOutAllocation=Allocation.createTyped(mRS,?mInAllocation.getType());
    ????????
    ????????mScript=new?ScriptC_mono(mRS,?getResources(),?R.raw.mono);
    ????????mScript.set_gIn(mInAllocation);
    ????????
    ????????mScript.set_gOut(mOutAllocation);
    ????????
    ????????mScript.set_gScript(mScript);
    ????????
    ????????mScript.invoke_filter();//通知RenderScript Compute Runtime?
    ? ? ? ? ?
    ????????mOutAllocation.copyTo(mBitmapOut);
    ????????
    ????????
    ? ? }?

    ?

    總結

    兩種方法無論怎么變化,最終的上的都是要通知RenderScript Compute 運行時做計算功能。 運行效果:

    ?

    ?

    代碼下載:

    ?RenderScript->Compute

    總結

    以上是生活随笔為你收集整理的Android RenderScript 关于Compute 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。