2016-07-18 58 views
0

我試圖將所有黑色像素轉換爲一個位圖(創建自一個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語句.. 我只是試圖使所有的像素在這個位圖紅色,甚至沒有工作..請幫助?

+0

順便說一句也許我不需要使用位圖?我的意思是我有我的可繪製目錄中的PNG,也許我甚至不需要使用ImageView? –

回答

1

我看到2個問題在這裏,

首先,你在你的記憶有這個位圖對象,並更改黑色像素爲紅色,但你怎麼知道它是否被更改或不呢?你應該一個ImageView的設置到這個位圖看到的結果(或將其保存到文件等)

二,使用的getPixels和替代的setPixels,的getPixels會給你的一個維數組,它會像1.row,2。 row,3.row等,setPixels也接受1維數組。此功能是令人難以置信的速度比改變像素1加1

+0

剛剛嘗試過,我得到了一個IndexOutOfBound錯誤 –

0

@Anil

花花公子

嗨,剛剛試了一下,我不能用它「因爲IndexOutOfBound例外...

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

這裏有什麼問題?

編輯:剛纔試了一下,現在在運行,沒有調試,它甚至不告訴我一個錯誤或東西..它只是讓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 –

相關問題