入隠者通信 〜病を嗜む〜 RSSフィード Twitter

2011-07-30

Android: Bitmap の背景を透明にする

C# の Maketrasparent みたいなメソッドがあるわけじゃないらしい.getPixel でビットマップの各ピクセルの色を調べて,setPixel で透明にするというのが基本ぽい.

上記が参考になった.しかし,このソースのままだと decodeResource で作成した bitmap では IllegalStateException が出てうまくいかない.mutable な bitmap を生成して,その bitmap に処理をするようにしたらうまくいった.何かの参考になるかもしれないのでフィードバックしてみる.

            Bitmap tmp = BitmapFactory.decodeResource(CustomSurfaceView.resources, 
            		R.drawable.sample); // sample.png というファイルがあるとする
            int width = tmp.getWidth(); 
            int height = tmp.getHeight(); 
            int[] pixels = new int[width * height]; 
            int c = tmp.getPixel(0, 0); 
            // 0,0 のピクセルと同じ色のピクセルを透明化する.
            Bitmap bitmap = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888 );
            tmp.getPixels(pixels, 0, width, 0, 0, width, height); 
            for (int y = 0; y < height; y++) { 
              for (int x = 0; x < width; x++) { 
                if( pixels[x + y * width]== c){ pixels[x + y * width] = 0; } 
              } 
            } 
            bitmap.eraseColor(Color.argb(0, 0, 0, 0)); 
            bitmap.setPixels(pixels, 0, width, 0, 0, width, height); 

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証