2013-11-23 135 views
1

我試圖根據十六進制值更改位圖的顏色。循環位圖像素以改變位圖的顏色android

之前,我試圖給我們myBitmap.setPixel與色彩在我的顏色選擇器選擇,我只是試圖讓它與RGB工作就像這樣:

for (int x = 0; x <= myBitmap.getWidth(); x++) { 

      for (int y = 0; x <= myBitmap.getHeight(); y++) { 

       myBitmap.setPixel(x, y, Color.rgb(255, 255, 255)); 

      } 

     } 

,如果我只是設置一個像素像這樣:

bitmapPreview.setPixel(50, 50, Color.rgb(255, 255, 255)); 

它工作得很好,但是當我通過位圖像素試圖環路迫使其關閉應用程序

如何使這項工作的任何建議或ANOT她建議我如何根據從顏色選擇器返回的值來更改位圖的顏色。從顏色選擇器返回的值的格式爲:白色= -1或藍色陰影= -15658590

謝謝!

回答

2

應用程序強制關閉背後的原因是您正在執行CPU密集型操作。 您的長時間運行操作應始終在AsyncTask中執行,而不是在應用程序的UI線程中執行。

選項1:

創建子類的AsyncTask <>類的和做在doInBackground方法您的像素的操作。不會迫使關閉應用程序

選項2:(爲位圖操作更好的選擇)

使用的renderScript用於執行這種圖形操作。 RenderScript是跨平臺的,並且可以比在java代碼中循環更快地執行像素操作。

+0

非常感謝你!我會嘗試你的建議! – user3023800

4

如果這是你正在使用的確切代碼,你的循環條件是錯誤的。您在兩個維度上超過了位圖的限制1個像素,並且您使用了錯誤的變量來檢查其中一個維度。更改<=在兩個循環<,並改變x在第二的條件y

for (int x = 0; x < myBitmap.getWidth(); x++) { 
    for (int y = 0; y < myBitmap.getHeight(); y++) { 
     myBitmap.setPixel(x, y, Color.rgb(255, 255, 255)); 
    } 
} 
+0

感謝您的回覆!很有幫助。 – user3023800

+0

不客氣。如果它解決了你的問題,你可以接受答案。如果沒有,請發佈錯誤消息logcat,我會再試一次。 – Dave

+0

實際上,我在異步任務中使用了您的修復程序,所以你們都幫助了我很多!我該如何接受?大聲笑 – user3023800