1

私は画像処理を開発しており、シークバーを使用してぼかし効果を適用したいと考えています。以下のコードを使用してビットマップをぼかしていますが、動作しますが、達成できないビットマップのぼかしを解除したいです...この問題を解決してください

private Bitmap blurfast(Bitmap bmp, int radius) {
      int w = bmp.getWidth();
      int h = bmp.getHeight();
      int[] pix = new int[w * h];
      bmp.getPixels(pix, 0, w, 0, 0, w, h);

      for(int r = radius; r >= 1; r /= 2) 
      {
          for(int i = r; i < h - r; i++)
          {
              for(int j = r; j < w - r; j++)
              {
                  int tl = pix[(i - r) * w + j - r];
                  int tr = pix[(i - r) * w + j + r];
                  int tc = pix[(i - r) * w + j];
                  int bl = pix[(i + r) * w + j - r];
                  int br = pix[(i + r) * w + j + r];
                  int bc = pix[(i + r) * w + j];
                  int cl = pix[i * w + j - r];
                  int cr = pix[i * w + j + r];

            pix[(i * w) + j] = 0xFF000000 |
            (((tl & 0xFF) + (tr & 0xFF) + (tc & 0xFF) + (bl & 0xFF) + 
(br & 0xFF) + (bc & 0xFF) + (cl & 0xFF) + (cr & 0xFF)) >> 3) & 0xFF |
            (((tl & 0xFF00) + (tr & 0xFF00) + (tc & 0xFF00) + (bl & 0xFF00) 
+  (br & 0xFF00) + (bc & 0xFF00) + (cl & 0xFF00) + (cr & 0xFF00)) >> 3) & 0xFF00 |
            (((tl & 0xFF0000) + (tr & 0xFF0000) + (tc & 0xFF0000) + 
(bl & 0xFF0000) + (br & 0xFF0000) + (bc & 0xFF0000) + (cl & 0xFF0000) + 
(cr & 0xFF0000)) >> 3) & 0xFF0000;
              }
          }
      }
      bmp.setPixels(pix, 0, w, 0, 0, w, h);
      return bmp;
    }
4

1 に答える 1