Недавно я узнал об использовании RenderScript
, пока я внедрил blur effet. Теперь я хочу увеличить часть растрового изображения.Использование renderScript для увеличения части растрового изображения
Я использую текущий .rs
код для обработки растрового изображения:
#pragma version(1)
#pragma rs_fp_relaxed
#pragma rs java_package_name(com.uniquestudio.renderscript)
#include "rs_debug.rsh"
int center_x,center_y;
int radius;
int scale;
int i;
int width;
uchar4 tempArray[4194304];
void init() {
i = 0;
}
uchar4 __attribute__((kernel)) traversal(uchar4 in, uint32_t x, uint32_t y) {
tempArray[i] = in;
i++;
return in;
}
uchar4 __attribute__((kernel)) invert(uchar4 in, uint32_t x, uint32_t y) {
int distance = (int) ((center_x -x) * (center_x - x) + (center_y - y) * (center_y - y));
if(distance<radius*radius){
int src_x = (int)((float)(x - center_x)/scale + center_x);
int src_y = (int)((float)(x - center_y)/scale + center_y);
return tempArray[src_y * width + src_x];
}
return in;
}
Как вы видите, первый я положил данные пикселей в массив tempArray
.
Java-код:
public static Bitmap magnifierBitmap(Bitmap bitmap, int x, int y, int radius,int scale, Context context){
RenderScript rs = RenderScript.create(context);
Allocation in = Allocation.createFromBitmap(rs, bitmap);
Allocation out = Allocation.createTyped(rs,in.getType());
int width = bitmap.getWidth();
ScriptC_magnifier magnifier = new ScriptC_magnifier(rs);
magnifier.set_center_x(x);
magnifier.set_center_y(y);
magnifier.set_radius(radius);
magnifier.set_scale(scale);
magnifier.set_width(width);
// first call kernel method
magnifier.forEach_traversal(in,in);
// second call kernel method
magnifier.forEach_invert(in,out);
out.copyTo(bitmap);
rs.destroy();
magnifier.destroy();
in.destroy();
out.destroy();
return bitmap;
}
В Java коде я сначала вызвать traversal
метод ядра. Затем я звоню invert
.
Однако это не работает для меня.
Спасибо ! Он отлично работает для меня – CoXier
Добро пожаловать! :) – cmaster11
Меня смущает тип param метода kernel.Что отличается от 'int' и 'uint32_t'? – CoXier