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

どうでもいい記事100選

近似色探索

近似色を探して似ている色であれば色を残して、似ていなければ色を白に設定しています。
閾値を低く設定すれば判定が厳しくなり、閾値を高く設定すれば判定が緩くなります。

  private Bitmap searchApproximationColor( Bitmap bitmap, int approximationNumber, int YYY, int XXX ){

    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 );

    if( YYY < 0 ){
      YYY = 0;
    } else if( width <= YYY ){
      YYY = width -1;
    }

    if( XXX < 0 ){
      XXX = 0;
    } else if( height <= XXX ){
      XXX = height -1;
    }

    int targetBitmapColor = pixels[( YYY + XXX * width )];

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

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

        int rr = Color.red(   targetBitmapColor ) - Color.red(   bitmapColor );
        int gg = Color.green( targetBitmapColor ) - Color.green( bitmapColor );
        int bb = Color.blue(  targetBitmapColor ) - Color.blue(  bitmapColor );

        if( approximationNumber < Math.sqrt( rr * rr + gg * gg + bb * bb ) ){
          pixels[( YY + XX * width )] = Color.rgb( 255, 255, 255 );
        }
      }
    }

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

    return bitmap;
  }

オリジナル:
f:id:masugata:20110405125239:image:medium
近似色探索(真中・閾値30)(違いは詳細で見てください):
f:id:masugata:20110428202833:image:medium
近似色探索(真中・閾値60)(違いは詳細で見てください):
f:id:masugata:20110428202841:image:medium
近似色探索(真中・閾値90)(違いは詳細で見てください):
f:id:masugata:20110428202902:image:medium
近似色探索(左下・閾値30)(違いは詳細で見てください):
f:id:masugata:20110428202922:image:medium
近似色探索(左下・閾値60)(違いは詳細で見てください):
f:id:masugata:20110428202932:image:medium
近似色探索(左下・閾値90)(違いは詳細で見てください):
f:id:masugata:20110428202942:image:medium
近似色探索(右上・閾値30)(違いは詳細で見てください):
f:id:masugata:20110428202954:image:medium
近似色探索(右上・閾値60)(違いは詳細で見てください):
f:id:masugata:20110428203004:image:medium
近似色探索(右上・閾値90)(違いは詳細で見てください):
f:id:masugata:20110428203010:image:medium


ちゃんとやるならタップした画像の座標をベースにして近似色を探します。。。これでネタ切れ。_| ̄|○
今までに紹介してきた処理はPhotoshopで簡単に処理できます。。。が、GIMPでも簡単に処理できるんだよね。
Photoshopを使ってみてツールの凄さを実感したのと同時にGIMPの凄さも実感しました。