我有一個像素只包含兩個argb值的位圖:純黑色和純透明。然後,我在Android中縮放位圖,現在位圖有許多argb值:純黑色和純透明和黑色,各種透明度級別(即半透明黑色);這是由於android自動完成的插值。我希望位圖像素只包含原始的兩個argb值。Android:有效確保縮放位圖中的像素只有兩種顏色
目前,我做到這一點有以下過程:
my_bitmap = Bitmap.createScaledBitmap(BitmapFactory
.decodeResource(context.getResources(),
R.drawable.my_resource),
new_width, new height, false);
for (int i = 0; i < my_bitmap.getWidth(); i++) {
for (int j = 0; j < my_bitmap.getWidth(); j++) {
if (my_bitmap.getPixel(i, j) != Color.TRANSPARENT) {
my_bitmap.setPixel(i, j, Color.BLACK);
}
}
}
這是因爲即便是一個小位圖便宜的手機上慢極了,沒有人知道如何要麼A)做到這一點更快或B)規模沒有新的argb值出現的位圖?
謝謝你,你是對的,但我仍然不明白爲什麼這麼慢。不是一個位圖只是一種多維數組,我可以以某種方式迭代而不調用getPixel和setPixel?也許這會加快速度。 – tjb
是的,但速度很慢,因爲每當位圖的hashCode更改時,屏幕都需要重新繪製位圖。這張圖是昂貴的,而不是內存中的操縱。這就是爲什麼我建議緩存位圖以便每次操作只重繪一次。 – Codeman
我不明白,當這個操作發生時,這個位圖不在屏幕上,我認爲這已經足夠了。我必須採取哪些額外步驟來緩存它? – tjb