2013-03-21 25 views
2

例如,我從位圖進行分配,然後對其應用brightnessContrastRs(),然後在該分配上使用類似實現的一些不同的過濾器,由brightnessContrastRs()動作更改?是否有可能爲一系列renderscript動作使用一個分配?

public Bitmap brightnessContrastRs(Bitmap bmIn, int brightness, int contrast) 
{ 
    Bitmap bmOut = Bitmap.createBitmap(bmIn.getWidth(), bmIn.getHeight(), 
      bmIn.getConfig()); 
    Allocation allocIn; 
    allocIn = Allocation.createFromBitmap(rs, bmIn, 
      Allocation.MipmapControl.MIPMAP_NONE, 
      Allocation.USAGE_SCRIPT); 
    Allocation allocOut = Allocation.createTyped(rs, allocIn.getType()); 

    scriptCBrightnessContrast.set_in(allocIn); 
    allocIn.destroy(); 
    scriptCBrightnessContrast.set_out(allocOut); 
    scriptCBrightnessContrast.set_script(scriptCBrightnessContrast); 
    float rowContrast = ((100.0f + contrast) * (100.0f + contrast)/10000.0f); 
    float rowBrightness = brightness/255.f; 
    scriptCBrightnessContrast.set_rowBrightness(rowBrightness); 
    scriptCBrightnessContrast.set_rowContrast(rowContrast); 
    scriptCBrightnessContrast.invoke_filter(); 
    allocOut.copyTo(bmOut); 
    allocOut.destroy(); 
    return bmOut; 
} 

的RS腳本:

rs_allocation out; 
rs_allocation in; 
rs_script script; 

float rowBrightness; 
float rowContrast; 

void root(const uchar4* v_in, uchar4* v_out, const void* usrData, uint32_t x, 
      uint32_t y) 
{ 
    float4 current = rsUnpackColor8888(*v_in); 

    current.r = clamp(((clamp(current.r + rowBrightness, 0.0f, 1.0f) - 0.5f) * rowContrast + 0.5f), 0.0f, 1.0f); 
    current.g = clamp(((clamp(current.g + rowBrightness, 0.0f, 1.0f)- 0.5f) * rowContrast + 0.5f), 0.0f, 1.0f); 
    current.b = clamp(((clamp(current.b + rowBrightness, 0.0f, 1.0f) - 0.5f) * rowContrast + 0.5f), 0.0f, 1.0f); 

    *v_out = rsPackColorTo8888(current.r, current.g, current.b, current.a); 
} 
void filter() 
{ 
    #if !defined(RS_VERSION) || (RS_VERSION < 14) 
     rsForEach(script, in, out, 0); 
    #else 
     rsForEach(script, in, out); 
    #endif 
} 

回答

1

如果你問,如果你可以傳遞一個分配圍繞這樣的,有工作上的事情,是的,你當然可以這樣做。但是,你不能很早地銷燬allocIn,因爲它在啓動時仍然需要被腳本使用。

0

您應該改用ScriptGroup。

相關問題