ポスタリゼーション
使う色を限定する(階調数を落とす)という事らしい。
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; }