簡體   English   中英

使用 Renderscript 調整位圖大小

[英]Resize bitmap using Renderscript

我目前正在做一個必須使用 RenderScript 的項目,所以我開始學習它,這是一項很棒的技術,因為就像 openGL 一樣,它允許您使用達到本機級別的計算代碼,並且不會不必使用dalvik vm。 這部分代碼的處理速度比使用普通 android 代碼要快得多。 我開始使用圖像處理,我想知道的是:

是否可以使用 RenderScript 調整位圖的大小? 這應該比使用 android 代碼調整位圖大小要快得多。 另外,renderscript 可以處理大於 48mB 的信息(每個進程限制在某些手機上)。

雖然您可以使用 Rendscript 來調整位圖大小,但我不確定這是否是最佳選擇。 快速瀏覽 Android 代碼庫會發現 Java API 確實會進入本機代碼來調整位圖大小,但如果調整大小算法不符合您的需要,則您必須實現自己的。

有許多關於 SO 的答案可以有效地縮放位圖。 我的建議是嘗試這些,如果他們仍然沒有按照您的意願行事,要么盡快,要么結果在視覺上如何顯示,然后調查編寫您自己的。 如果您仍然想自己編寫,請使用可用的性能工具來查看您是否真的更快或只是重新發明輪子。

您可以使用以下功能調整圖像大小。

private Bitmap resize(Bitmap inBmp) {
    RenderScript mRs = RenderScript.create(getApplication());
    Bitmap outBmp = Bitmap.createBitmap(OUTPUT_IMAGE_WIDTH, inBmp.getHeight() * OUTPUT_IMAGE_WIDTH /inBmp.getWidth(), inBmp.getConfig());
    ScriptIntrinsicResize siResize = ScriptIntrinsicResize.create(mRs);
    Allocation inAlloc = Allocation.createFromBitmap(mRs, inBmp);
    Allocation outAlloc = Allocation.createFromBitmap(mRs, outBmp);
    siResize.setInput(inAlloc);
    siResize.forEach_bicubic(outAlloc);
    outAlloc.copyTo(outBmp);
    inAlloc.destroy();
    outAlloc.destroy();
    siResize.destroy();
    return outBmp;
}

OUTPUT_IMAGE是指定輸出圖像寬度的整數值。

注意:在使用 RenderScript 分配時,您必須非常小心,因為它們會導致內存泄漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM