Android 如何使位图具有扩散效果

Android 如何使位图具有扩散效果,android,bitmap,convolution,Android,Bitmap,Convolution,在我的应用程序中,我将文本转换为位图,然后我需要它平滑地变成云,然后消失。我用卷积矩阵来模糊位图,使其不相似 但我不知道如何模糊位图。通过模糊扩散,我的意思是使位图中的图片更大、更平滑。就像飞机的轨迹。首先它有锋利的边缘,然后扩散,然后消失。 有关于传播这张照片的想法吗 模糊消色差器的初步代码(不理想,需要改进) newrunnable(){ @凌驾 公开募捐{ if(k

在我的应用程序中,我将文本转换为位图,然后我需要它平滑地变成云,然后消失。我用卷积矩阵来模糊位图,使其不相似

但我不知道如何模糊位图。通过模糊扩散,我的意思是使位图中的图片更大、更平滑。就像飞机的轨迹。首先它有锋利的边缘,然后扩散,然后消失。 有关于传播这张照片的想法吗

模糊消色差器的初步代码(不理想,需要改进)

newrunnable(){
@凌驾
公开募捐{
if(k<150){
k++;
((TextView)view.findviewbyd(R.id.TextView)).setText(k+);
bitmapEffect=创建位图卷积(bitmapEffect,矩阵模糊,0.98f);
image1.setImageBitmap(bitmapEffect);
new Handler().postDelayed(这个,16);
}
}
});
私有位图createBitmap_卷积(位图src、浮点[]系数、浮点因子){
位图结果=Bitmap.createBitmap(src.getWidth(),
src.getHeight(),src.getConfig());
RenderScript RenderScript=RenderScript.create(活动);
分配输入=Allocation.createFromBitmap(renderScript,src);
分配输出=Allocation.createFromBitmap(renderScript,结果);
ScriptIntrinsicConvolve3x3卷积=ScriptIntrinsicConvolve3x3
.create(renderScript,Element.U8_4(renderScript));
卷积。设置输入(输入);
标准化(系数、因子);
卷积系数(系数);
卷积forEach(输出);
输出.copyTo(结果);
renderScript.destroy();
返回结果;
}
私有void normalize(float[]系数,float normalizeFactor){
浮点数和=0;
对于(int i=0;i<系数.length;i++){
总和+=系数[i];
}
如果(总和=0){
总和=1;
}
对于(int i=0;i<系数.length;i++){
系数[i]=系数[i]/和*normalizeFactor;
}
}
浮点[]矩阵模糊=
{1.0f,1.0f,1.0f,
1.0f,1.0f,1.0f,
1.0f,1.0f,1.0f};

是否要调整/拉伸位图


位图类具有该位图的方法。createScaledBitmap(位图、新宽度、新高度、true)

您好,您正在使用哪个API作为渲染条件。。着色器编程是很难学还是很容易,因为你可以根据需要复制粘贴所有内容?我不想调整大小。我在位图中有白色对象。我想让白色在物体周围扩散。
           new Runnable() {
                @Override
                public void run() {
                    if (k < 150) {
                        k++;
                        ((TextView)view.findViewById(R.id.textView)).setText(k + "");

                        bitmapEffect = createBitmap_convolve(bitmapEffect, matrix_blur, 0.98f);

                        image1.setImageBitmap(bitmapEffect);
                        new Handler().postDelayed(this, 16);
                    }
                }
            });

private Bitmap createBitmap_convolve(Bitmap src, float[] coefficients, float factor) {

    Bitmap result = Bitmap.createBitmap(src.getWidth(),
            src.getHeight(), src.getConfig());

    RenderScript renderScript = RenderScript.create(activity);

    Allocation input = Allocation.createFromBitmap(renderScript, src);
    Allocation output = Allocation.createFromBitmap(renderScript, result);

    ScriptIntrinsicConvolve3x3 convolution = ScriptIntrinsicConvolve3x3
            .create(renderScript, Element.U8_4(renderScript));
    convolution.setInput(input);

    normalize(coefficients, factor);

    convolution.setCoefficients(coefficients);
    convolution.forEach(output);

    output.copyTo(result);
    renderScript.destroy();
    return result;
}

private void normalize(float[] coefficients, float normalizeFactor) {
        float sum = 0;
        for (int i = 0; i < coefficients.length; i++) {
            sum += coefficients[i];
        }
        if(sum == 0){
            sum = 1;
        }
        for (int i = 0; i < coefficients.length; i++) {
            coefficients[i] = coefficients[i] / sum * normalizeFactor;
        }
    }

float[] matrix_blur =
        { 1.0f, 1.0f, 1.0f,
          1.0f, 1.0f, 1.0f,
          1.0f, 1.0f, 1.0f};