2014-02-13 35 views
0

我有兩個位圖,即bm1和bm2,並且我想創建(儘可能快)另一個位圖,這是bm1和bm2之間的漸變混合,其中bm1被加權與weight和bm2與1-weight在android中的兩個位圖之間淡出的最佳方式

我的當前實現如下:

private Bitmap Fade(Bitmap bm1, Bitmap bm2, double weight) 
{ 
    int width = bm1.getWidth(); 
    int height = bm1.getHeight(); 

    if (width != bm2.getWidth() || height != bm2.getHeight()) 
     return null; 

    Bitmap bm = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 

    for (int y = 0; y < height; y++) 
     for (int x = 0; x < width; x++) 
     { 
      int pix_s = bm1.getPixel(x, y); 
      int pix_d = bm2.getPixel(x, y); 

      int r_s = (pix_s >> 16) & 0xFF; 
      int g_s = (pix_s >> 8) & 0xFF; 
      int b_s = pix_s & 0xFF; 

      int r_d = (pix_d >> 16) & 0xFF; 
      int g_d = (pix_d >> 8) & 0xFF; 
      int b_d = pix_d & 0xFF; 

      int r = (int)((1-weight) * r_s + weight * r_d); 
      int g = (int)((1-weight) * g_s + weight * g_d); 
      int b = (int)((1-weight) * b_s + weight * b_d); 
      int pix = 0xff000000 | (r << 16) | (g << 8) | b; 
      bm.setPixel(x, y, pix); 
     } 
    return bm; 
} 

正如你可以看到,它簡單地設置所生成的圖像的每個像素的RGB分量與BM1與BM2的像素的相應的RGB分量之間的內插。

但是,此功能掃描非常慢,因爲它掃描了兩個輸入位圖的所有像素。
有沒有更有效的方法來做同樣的事情?
例如,通過對透明屬性進行某種操作?

+0

您是否正在嘗試在圖像視圖中顯示它或用於其他目的? –

+0

用於其他目的。我_do_not_不想顯示生成的位圖。 – user2923045

+0

你覺得玩阿爾法並將它們疊加在畫布上怎麼樣? –

回答

1

Here它顯示瞭如何改變位圖的不透明度,它改變了RGB顏色的alpha通道。 和Here它顯示瞭如何在畫布上疊加兩個位圖

相關問題