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

どうでもいい記事100選

ポスタリゼーション

使う色を限定する(階調数を落とす)という事らしい。

  private Bitmap effectPosterization( Bitmap bitmap ){

    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 step = 5;
    int[] stepArray = new int[step];

    for( int X = 0; X < step; ++X ){
      int rounds = (int)Math.round( 255.0f / ( step - 1 ) * X );
      stepArray[X] = rounds;
    }

    for( int YY = 0; YY < width; ++YY ){
      for( int XX = 0; XX < height; ++XX ){

        int bitmapColor = pixels[( YY + XX * width )];

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

        int rr, rrr;
        int gg, ggg;
        int bb, bbb;

        rrr = (int)( Math.floor( r / ( 256 / step ) ) - 1 );

        if( rrr < 0 ){
          rrr = 0;
        } else if( rrr >= step ){
          rrr = step = 1;
        }

        ggg = (int)( Math.floor( g / ( 256 / step ) ) - 1 );

        if( ggg < 0 ){
          ggg = 0;
        } else if( ggg >= step ){
          ggg = step = 1;
        }

        bbb = (int)( Math.floor( b / ( 256 / step ) ) - 1 );

        if( bbb < 0 ){
          bbb = 0;
        } else if( bbb >= step ){
          bbb = step = 1;
        }

        rr = stepArray[rrr];
        gg = stepArray[ggg];
        bb = stepArray[bbb];

        pixels[( YY + XX * 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:20110331141822:image:medium