2016-05-30 78 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; 
    } 
相關問題