2016-05-30 153 views
1

我试图制作一个应用程序,当应用程序打开时,它会在后台显示不同的图像,但是当我尝试调用该方法时。我越来越error.I制作模糊图像的API低于16这是我用什么调用方法时发生错误

public class MainActivity extends AppCompatActivity { 
int roll[]={R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4,R.drawable.img5,R.drawable.img6}; 
int number; 
private final Paint mPaint = new Paint(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Random num= new Random(); 
number=num.nextInt(6); 
    ImageView img =(ImageView)findViewById(R.id.imageView); 

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),roll[number]); 
    Bitmap blurredBitmap = blur(""+roll[number]); 
    img.setImageBitmap(blurredBitmap); 
} 


public Bitmap blur(final String pathToBitmap) { 
    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    final Bitmap normalOne = BitmapFactory.decodeFile(pathToBitmap, options); 
    final Bitmap resultBitmap = Bitmap.createBitmap(options.outWidth, options.outHeight, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(resultBitmap); 
    mPaint.setAlpha(180); 
    canvas.drawBitmap(normalOne, 0, 0, mPaint); 
    int blurRadius = 12; 
    for (int row = -blurRadius; row < blurRadius; row += 2) { 
     for (int col = -blurRadius; col < blurRadius; col += 2) { 
      if (col * col + row * row <= blurRadius * blurRadius) { 
       mPaint.setAlpha((blurRadius * blurRadius)/((col * col + row * row) + 1) * 2); 
       canvas.drawBitmap(normalOne, row, col, mPaint); 
      } 
     } 
    } 
    normalOne.recycle(); 
    return resultBitmap; 
} 
} 

我在哪里做错了?我使用这种方法,因为在谷歌大多数的模糊效果是不适用于API < 16.只是想知道我在代码中做错了什么。

+0

的[创建模糊透明背景效果](http://stackoverflow.com/questions/6795483/create-blurry-transparent-background-effect) –

+0

正如我所提到可能的复制较早的项目是用于API <= 16那是主要原因 – SAVVY

+0

是什么问题?有没有崩溃?是不是你所期望的结果图像?请详细说明实际结果。如果由此产生的图像不好,请张贴图像。如果发生故障,请显示堆栈跟踪。 –

回答

2

当试图使用此代码:

位图blurredBitmap =模糊( “” +辊[数]);

此路径(“” +辊[数字]),因为绘图资源被添加到在运行时的二进制,所以不能由路径访问不匹配的绝对路径。尝试使用

BitmapFactory.decodeResource(getResources(),resourceID);

public Bitmap blur(int resourceId) { 
     final Bitmap normalOne = BitmapFactory.decodeResource(getResources(),resourceId); 
     final Bitmap resultBitmap = Bitmap.createBitmap(normalOne.getWidth(), normalOne.getHeight(), Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(resultBitmap); 
     mPaint.setAlpha(180); 
     canvas.drawBitmap(normalOne, 0, 0, mPaint); 
     int blurRadius = 12; 
     for (int row = -blurRadius; row < blurRadius; row += 2) { 
      for (int col = -blurRadius; col < blurRadius; col += 2) { 
       if (col * col + row * row <= blurRadius * blurRadius) { 
        mPaint.setAlpha((blurRadius * blurRadius)/((col * col + row * row) + 1) * 2); 
        canvas.drawBitmap(normalOne, row, col, mPaint); 
       } 
      } 
     } 
     normalOne.recycle(); 
     return resultBitmap; 
    }