2016-07-18 8 views
0

すべての黒のピクセルを1つのビットマップに変換しようとしています(ImageViewから作成されたPNGファイル)。 私は多くの私はまだそれに成功することができませんでした。 私を助けてください私のようなのためにそれをしようとしている3日間ストレート...私のコードの 少し例:画像の黒を別の色に設定する(ImageView/Bitmap)

headSkin.buildDrawingCache(); 
      final Bitmap bmp = headSkin.getDrawingCache(); 


      int w = bmp.getWidth(); 
      int h = bmp.getHeight(); 

      for (int x = 0; x < w; x++) { 
       for (int y = 0; y < h; y++) { 
        int color = bmp.getPixel(x, y); 

        // Shift your alpha component value to the red component's. 


        bmp.setPixel(x, y, Color.RED); 

       } 
      } 

あなたが見ることができるように...私もIF文を述べるませんでした。.. 私はこのビットマップのすべてのピクセルを赤にしようとしましたが、これはうまくいきませんでした.. pls help?

+0

私はビットマップを使用する必要はありませんか?私は私のdrawableディレクトリにPNGを持っていると私はImageViewを使用する必要はありませんか? –

答えて

1

私は2つの問題は、あなたがあなたの記憶では、このBitmapオブジェクトを持って、

まず、ここを参照してください、あなたは赤に黒画素を変更するが、それは変更されているかどうか、あなたはどのように知っていますか?このビットマップにImageViewを設定して結果を確認するか、ファイルに保存してください。

次に、getPixelsとsetPixelsを使用してgetPixelsが1次元配列を返します.1row、2となります。行、3rowなど。また、setPixelsは1次元配列を受け入れます。この関数は、

こんにちは男@Anil 1.

+0

ちょうど試してみましたが、私はIndexOutOfBoundエラーが発生しました –

0

によって画素1を変更するよりも非常に高速である、ちょうどそれを試してみましたが、私はIndexOutOfBound例外のcuzの」それを使用することはできません...

headSkin.buildDrawingCache(); 
      bmp = headSkin.getDrawingCache(); 




      int [] allpixels = new int [bmp.getHeight()*bmp.getWidth()]; 

      bmp.getPixels(allpixels, 0, bmp.getWidth(), 0, 0, bmp.getWidth(), bmp.getHeight()); 

      for(int i = 0; i < allpixels.length; i++) 
      { 
       if(allpixels[i] == Color.BLACK) 
       { 
        allpixels[i] = Color.RED; 
       } 
      } 
      bmp.setPixels(allpixels, 0, bmp.getWidth(), 0, 0, bmp.getWidth(), bmp.getHeight()); 


      headSkin.setImageBitmap(bmp); 

ここで何が問題なの?

EDIT:ただ...実行している間、今それを試してみましたデバッグないとそれも私のエラーか何かが表示されないそれはちょうど、このビットマップ全体で約1〜2つのピクセルが赤

0
headSkin.buildDrawingCache(); 
     final Bitmap bmp = headSkin.getDrawingCache(); 

を作ります私はあなたがこれらの行に問題があると思う。残りのコードは上手く見えます。 ビットマップが初期化されていない可能性があります。そのため、内部にデータを含むビットマップオブジェクトではなく、ビットマップ参照のみがあります。

あなたのコードからビットマップ部分を削除し、このようにビットマップを初期化することができます:

Bitmap myBitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.RGB8888); 

、その後、あなたは上記の行ったようピクセル操作を実行し、ちょうど同じ色にすべてのピクセルを設定します。

+0

私はいくつかの機能を変更して以来、(アプリケーション)を働いています... とにかく、私が現在持っている主な問題を助けることができます: 他の色の黒いピクセルは、画像がぼやけてしまいます。まるで、マリオのゲームのようなものです。ピクセル化します。私はそれに対して何ができますか? –

+0

もっとコードを提供できますか? – Anil

+0

nvm固定:P –

関連する問題