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

どうでもいい記事100選

ブレンドモード

まとめて公開。。。これでネタ切れ。_| ̄|○

  // ブレンドモード(加算)
  private Bitmap effectBlendAdd( 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 mergeR = 250, mergeG = 153, mergeB = 10;

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

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

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

        rr = rr + mergeR;
        gg = gg + mergeG;
        bb = bb + mergeB;

        if( rr > 255 ){
          rr = 255;
        }

        if( gg > 255 ){
          gg = 255;
        }

        if( bb > 255 ){
          bb = 255;
        }

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

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

    return bitmap;
  }

  // ブレンドモード(乗算)
  private Bitmap effectBlendMultiple( 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 mergeR = 250, mergeG = 153, mergeB = 10;

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

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

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

        rr = ( rr * mergeR ) / 255;
        gg = ( gg * mergeG ) / 255;
        bb = ( bb * mergeB ) / 255;

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

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

    return bitmap;
  }

  // ブレンドモード(減算)
  private Bitmap effectBlendDifference( 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 mergeR = 250, mergeG = 153, mergeB = 10;

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

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

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

        rr = rr - mergeR;
        gg = gg - mergeG;
        bb = bb - mergeB;

        if( rr < 0 ){
          rr = 0;
        }

        if( gg < 0 ){
          gg = 0;
        }

        if( bb < 0 ){
          bb = 0;
        }

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

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

    return bitmap;
  }

  // ブレンドモード(スクリーン)
  private Bitmap effectBlendScreen( 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 mergeR = 250, mergeG = 153, mergeB = 10;

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

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

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

        rr = 255 - ( ( 255 - rr ) * ( 255 - mergeR ) ) / 255;
        gg = 255 - ( ( 255 - gg ) * ( 255 - mergeG ) ) / 255;
        bb = 255 - ( ( 255 - bb ) * ( 255 - mergeB ) ) / 255;
        
        pixels[( YY + XX * width )] = Color.rgb( rr, gg, bb );
      }
    }

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

    return bitmap;
  }
  
  // ブレンドモード(オーバーレイ)
  private Bitmap effectBlendOverlay( 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 mergeR = 250, mergeG = 153, mergeB = 10;

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

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

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

        if( rr < 128 ){
          rr = rr * mergeR * 2 / 255;
        } else {
          rr = 2 * ( rr + mergeR - rr * mergeR / 255 ) - 255;
        }

        if( gg < 128 ){
          gg = gg * mergeG * 2 / 255;
        } else {
          gg = 2 * ( gg + mergeG - gg * mergeG / 255 ) - 255;
        }

        if( bb < 128 ){
          bb = bb * mergeB * 2 / 255;
        } else {
          bb = 2 * ( bb + mergeB - bb * mergeB / 255 ) - 255;
        }

        if( rr > 255 ){
          rr = 255;
        }

        if( gg > 255 ){
          gg = 255;
        }

        if( bb > 255 ){
          bb = 255;
        }

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

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

    return bitmap;
  }

  // ブレンドモード(覆い焼き)
  private Bitmap effectBlendDodge( 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 mergeR = 250, mergeG = 153, mergeB = 10;

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

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

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

        if( mergeR == 255 ){
          rr = 255;
        } else {
          rr = rr * 255 / ( 255 - mergeR );
        }


        if( mergeG == 255 ){
          gg = 255;
        } else {
          gg = gg * 255 / ( 255 - mergeG );
        }

        if( mergeB == 255 ){
          bb = 255;
        } else {
          bb = bb * 255 / ( 255 - mergeB );
        }

        if( rr > 255 ){
          rr = 255;
        }

        if( gg > 255 ){
          gg = 255;
        }

        if( bb > 255 ){
          bb = 255;
        }

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

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

    return bitmap;
  }

  // ブレンドモード(焼き込み)
  private Bitmap effectBlendBurn( 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 mergeR = 250, mergeG = 153, mergeB = 10;

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

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

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

        if( mergeR == 0 ){
          rr = 0;
        } else {
          rr = 255 - ( ( 255 - rr ) * 255 / mergeR );
        }
        
        if( mergeG == 0 ){
          gg = 0;
        } else {
          gg = 255 - ( ( 255 - gg ) * 255 / mergeG );
        }

        if( mergeB == 0 ){
          bb = 0;
        } else {
          bb = 255 - ( ( 255 - bb ) * 255 / mergeB );
        }
        

        if( rr < 0 ){
          rr = 0;
        }

        if( gg < 0 ){
          gg = 0;
        }

        if( bb < 0 ){
          bb = 0;
        }

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

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

    return bitmap;
  }

  // ブレンドモード(比較・暗)
  private Bitmap effectBlendDarken( 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 mergeR = 250, mergeG = 153, mergeB = 10;

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

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

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

        if( rr > mergeR ){
          rr = mergeR;
        }

        if( gg > mergeG ){
          gg = mergeG;
        }

        if( bb > mergeB ){
          bb = mergeB;
        }

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

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

    return bitmap;
  }

  // ブレンドモード(比較・明)
  private Bitmap effectBlendLighten( 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 mergeR = 250, mergeG = 153, mergeB = 10;

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

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

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

        if( rr < mergeR ){
          rr = mergeR;
        }

        if( gg < mergeG ){
          gg = mergeG;
        }

        if( bb < mergeB ){
          bb = mergeB;
        }

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

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

    return bitmap;
  }

  // ブレンドモード(除外)
  private Bitmap effectBlendExclusion( 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 mergeR = 250, mergeG = 153, mergeB = 10;

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

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

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

        rr = rr + mergeR - 2 * rr * mergeR / 255;
        gg = gg + mergeG - 2 * gg * mergeG / 255;
        bb = bb + mergeB - 2 * bb * mergeB / 255;

        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:20110421130614:image:medium
ブレンドモード(乗算)(違いは詳細で見てください):
f:id:masugata:20110421130603:image:medium
ブレンドモード(減算)(違いは詳細で見てください):
f:id:masugata:20110421130557:image:medium
ブレンドモード(スクリーン)(違いは詳細で見てください):
f:id:masugata:20110421131022:image:medium
ブレンドモード(オーバーレイ)(違いは詳細で見てください):
f:id:masugata:20110421131056:image:medium
ブレンドモード(覆い焼き)(違いは詳細で見てください):
f:id:masugata:20110421134902:image:medium
ブレンドモード(焼き込み)(違いは詳細で見てください):
f:id:masugata:20110421134937:image:medium
ブレンドモード(比較・暗)(違いは詳細で見てください):
f:id:masugata:20110421131900:image:medium
ブレンドモード(比較・明)(違いは詳細で見てください):
f:id:masugata:20110421131937:image:medium
ブレンドモード(除外)(違いは詳細で見てください):
f:id:masugata:20110421132000:image:medium


本来であれば二枚の画像を使って処理するのですが、面倒だったので二枚目の画像(RGB値)は固定にしています。手抜きでスミマセン。。。_| ̄|○
新しいネタが蓄積されてきたら再び公開するかもしれません。。。