2010-11-25 57 views
3

次のコードを使用して画像をぼかしていますが、動作しません。私が得る最終的なイメージは色が非常に歪んでいて、私が望むぼかしではありません。私は間違って何をしていますか?Androidで画像をぼかして表示

public Bitmap blurBitmap(Bitmap bmpOriginal) 
{   
    int width, height; 
    height = bmpOriginal.getHeight(); 
    width = bmpOriginal.getWidth();  

    Bitmap bmpBlurred = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); 
    for (int i = 1; i < width - 1; i++) { 
     for (int j = 1; j < height - 1; j++) { 
      int color = (int) getAverageOfPixel(bmpOriginal, i, j); 
      bmpBlurred.setPixel(i, j, Color.argb(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color))); 
     } 
    } 
    return bmpBlurred; 
} 

private double getAverageOfPixel(Bitmap bitmap, int i, int j) { 
    return (
    bitmap.getPixel(i-1, j-1) + bitmap.getPixel(i-1, j) + bitmap.getPixel(i-1, j+1) + 
    bitmap.getPixel(i, j-1) + bitmap.getPixel(i, j) + bitmap.getPixel(i, j+1) + 
    bitmap.getPixel(i+1, j-1) + bitmap.getPixel(i+1, j) + bitmap.getPixel(i+1, j+1))/9; 
} 
+0

あなたはあなたの解決方法を教えてもらえますか、私は同じ質問を満たしています。ありがとうございます.http://stackoverflow.com/questions/6728860/blur-and-emboss-an-image/6744104#6744104 – pengwang

答えて

2

問題は、すべてのカラーチャンネルを一度に合成していることです。ぼかし機能は、赤、緑、青の各チャンネルに別々に適用する必要があります。

SurfaceViewを作成してFX_SURFACE_BLURフラグを使用する方が簡単でしょうか?

+0

ありがとう!色チャンネルを分離しました!しかし、画像サイズはぼかし後10倍になります。私はそれをどのように圧縮できるか知っていますか?私はPNG(100KB)から950KBになるJPEGに変換しています。そして、私は上記のコードでゼロに品質を設定しています:\t \t bmpBlurred.compress(Bitmap.CompressFormat.JPEG、0、outputStream); – n1kh1lp

+0

また、あなたの2番目のポイントに答えるために、私自身のアルゴリズムを書くことを試みています。助けてくれてありがとう! – n1kh1lp

+0

イメージはどのサイズですか? 950KBは余分に見えます... 600×400ピクセルの画像には、およそその領域が完全に圧縮解除されている必要があります。 –

関連する問題