[英]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.