ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

ディザリング(ベイヤー・渦巻・網点)

基本的には二値化処理ですが、こちらは乱数を使わずに一定のパターンに応じて処理を行います。

  private Bitmap effectPatternDither( Bitmap bitmap, int patternFlg ){

    if( bitmap == null ){
      bitmap = BitmapFactory.decodeResource( getResources( ), R.drawable.original ).copy( Bitmap.Config.ARGB_8888, true );
    }

    if( bitmap == null ){
      return bitmap;
    }

    if( bitmap.isMutable( ) != true ){
      bitmap = bitmap.copy( Bitmap.Config.ARGB_8888, true );
    }

    int height   = bitmap.getHeight( );
    int width    = bitmap.getWidth( );

    int[] pixels = new int[( width * height )];
    bitmap.getPixels( pixels, 0, width, 0, 0, width, height );

    int i, j;
    int[][] pattern;
    int[][] pattern1 = { { 0,  8, 2, 10 }, { 12, 4, 14, 6 }, { 3, 11, 1,  9  }, { 15, 7,  13, 5  } };
    int[][] pattern2 = { { 6,  7, 8, 9  }, { 5,  0, 1, 10 }, { 4, 3,  2,  11 }, { 15, 14, 13, 12 } };
    int[][] pattern3 = { { 11, 4, 6, 9  }, { 12, 0, 2, 14 }, { 7, 8,  10, 5  }, { 3,  15, 13, 1  } };

    if( patternFlg == 2 ){
      pattern = pattern2;
    } else if( patternFlg == 3 ){
      pattern = pattern3;
    } else {
      pattern = pattern1;
    }

    for( i = 0; i < width; ++i ){
      for( j = 0; j < height; ++j ){

        int bitmapColor = pixels[( i + j * width )];

        int r = Color.red( bitmapColor );
        int g = Color.green( bitmapColor );
        int b = Color.blue( bitmapColor );

        r = r / 16;
        g = g / 16;
        b = b / 16;

        int x, y, z;
        y = ( r + g + b ) / 3;
        z = pattern[i % 4][j % 4];

        if( y < z ){
          x = 0;
        } else {
          x = 255;
        }

        int rr, gg, bb;
        rr = gg = bb = x;

        pixels[( i + j * width )] = Color.rgb( rr, gg, bb );
      }
    }

    bitmap.setPixels( pixels, 0, width, 0, 0, width, height );

    return bitmap;
  }

オリジナル:
f:id:masugata:20110405125239:image:medium
二値化(白と黒):
f:id:masugata:20110331140844:image:medium
ディザリング(ランダム)(違いは詳細で見てください):
f:id:masugata:20110331141731:image:medium
ディザリング(ベイヤー)(違いは詳細で見てください):
f:id:masugata:20110411150036:image:medium
ディザリング(渦巻)(違いは詳細で見てください):
f:id:masugata:20110411150320:image:medium
ディザリング(網点)(違いは詳細で見てください):
f:id:masugata:20110411150548:image:medium