Programim dhe zhvillim, javascript, python, php, html

Si të përdorni RenderScript me alokime të shumta hyrëse?

Kohët e fundit, zbulova se render script është një zgjedhje më e mirë për përpunimin e imazhit në Android. Performanca është e mrekullueshme. Por nuk ka shumë dokumente për të. Po pyes veten nëse mund të bashkoj shumë foto në një foto rezultati sipas skenarit të renderit.

http://developer.android.com/guide/topics/renderscript/compute.html thotë:

Një kernel mund të ketë një hyrje Allocation, një dalje Allocation, ose të dyja. Një kernel nuk mund të ketë më shumë se një hyrje ose një dalje Allocation. Nëse kërkohet më shumë se një hyrje ose dalje, ato objekte duhet të lidhen me skriptet globale rs_allocation dhe të aksesohen nga një kernel ose funksion i thirrshëm nëpërmjet rsGetElementAt_type() ose rsSetElementAt_type().

A ka ndonjë shembull kodi për këtë çështje?

26.12.2013

Përgjigjet:


1

Për kernelin me hyrje të shumëfishta, do t'ju duhet të trajtoni manualisht inpute shtesë.

Le të themi se dëshironi 2 hyrje.

shembull.rs:

rs_allocation extra_alloc;

uchar4 __attribute__((kernel)) kernel(uchar4 i1, uint32_t x, uint32_t y)
{
    // Manually getting current element from the extra input
    uchar4 i2 = rsGetElementAt_uchar4(extra_alloc, x, y);
    // Now process i1 and i2 and generate out
    uchar4 out = ...;
    return out;
}

Java:

Bitmap bitmapIn = ...;
Bitmap bitmapInExtra = ...;
Bitmap bitmapOut = Bitmap.createBitmap(bitmapIn.getWidth(),
                    bitmapIn.getHeight(), bitmapIn.getConfig());

RenderScript rs = RenderScript.create(this);
ScriptC_example script = new ScriptC_example(rs);

Allocation inAllocation = Allocation.createFromBitmap(rs, bitmapIn);
Allocation inAllocationExtra = Allocation.createFromBitmap(rs, bitmapInExtra);
Allocation outAllocation = Allocation.createFromBitmap(rs, bitmapOut);

// Execute this kernel on two inputs
script.set_extra_alloc(inAllocationExtra);
script.forEach_kernel(inAllocation, outAllocation);

// Get the data back into bitmap
outAllocation.copyTo(bitmapOut);
12.08.2015

2

doni të bëni diçka të tillë

rs_allocation input1;
rs_allocation input2;

uchar4 __attribute__((kernel)) kernel() {
  ... // body of kernel goes here
  uchar4 out = ...;
  return out;
}

Telefononi set_input1 dhe set_input2 nga kodi juaj Java për t'i vendosur ato në Alokimet e duhura, më pas telefononi forEach_kernel me Alokimin tuaj të daljes.

26.12.2013
  • Faleminderit, do të provoj. 28.12.2013
  • Në fakt, nuk mund të gjej një metodë të quajtur set_input1 dhe set_input2 në klasën ScriptC nga shtresa Java. Në vend të kësaj, ekziston një metodë e quajtur ScriptC.bindAllocation (Allocation va, int slot). Gjithashtu, ScriptC.forEach_kernel nuk ekziston. 30.12.2013
  • klasa gjenerohet automatikisht nga zinxhiri i veglave RS - do të jetë ScriptC_ (emri i skedarit RS). 31.12.2013
  • Ekziston një klasë ScriptC_aaa, por asnjë metodë e tillë e quajtur set_input1. 31.12.2013
  • metoda do të quhet set_(emri i ndryshores në skedarin tuaj RS), kështu që nuk do të jetë domosdoshmërisht input1 ose diçka e tillë. 02.01.2014
  • Për qëllime ilustruese, funksioni i kernelit duhet të ketë argumente hyrëse si kernel(uint32_t x, uint32_t y) {...}. 21.06.2014

  • 3

    Kështu e bëni:

    në skedarin .rs:

    uchar4 RS_KERNEL myKernel(float4 in1, int in2, uint32_t x, uint32_t y)
    {
        //My code
    }
    

    në java:

    myScript.forEach_myKernel(allocationInput1, allocationInput2, allocationOutput);
    

    uchar4, float4 dhe int përdoren si shembull. Ajo funksionon për mua, ju mund të shtoni më shumë se 2 hyrje.

    16.02.2018
    Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..