2011-06-21 140 views
0

這樣做的最佳方式是什麼。我有一個高度*寬度的數組長度。我是否簡單地通過位圖將每個像素設置爲基於循環索引的數組?謝謝在整數數組中存儲位圖

[更新] 這是一個應用程序,在位圖上放置魚眼失真。我試圖在存儲陣列中的像素數據,而不是調用Bitmap.setPixel(),因爲這涉及一個龐大的開銷GC

for (int j=0;j<dst.getHeight();j++) { 
     for (int i=0;i<dst.getWidth();i++) { 
      origPixel= input.getPixel(i,j); 
      getRadXStart = System.currentTimeMillis(); 
      float x = getRadialX((float)j,(float)i,centerX,centerY,k); 
      float y = getRadialY((float)j,(float)i,centerX,centerY,k); 
      sampleImage(input,x,y); 

      color = ((s[1]&0x0ff)<<16)|((s[2]&0x0ff)<<8)|(s[3]&0x0ff); 
     // System.out.print(i+" "+j+" \\"); 

      //if(Math.sqrt(Math.pow(i - centerX, 2) + (Math.pow(j - centerY, 2))) <= 150){ 
      if (Math.pow(i - centerX, 2) + (Math.pow(j - centerY, 2)) <= 22500) { 
       // dst.setPixel(i, j, color); 
       arr[i]=color; 
      } else { 
       //dst.setPixel(i,j,origPixel); 
       arr[i]=origPixel; 
      } 
     } 
    } 

Bitmap dst2 = Bitmap.createBitmap(arr,width,height,input.getConfig()); 
     return dst2; 
+0

示例代碼向我們展示了什麼?你在哪裏設置像素? –

+0

@ted hopp嗨,更新後 – turtleboy

回答

0

您是否嘗試過的方法getPixels(...) on Bitmap

+0

嗨,我想你剛剛錯過了我的更新。來自位圖的set/getPixel帶有大的GC開銷。大約需要50秒來轉換圖像。這是由於gc的表演。我已經運行了traceview,它是我需要避免的位圖​​集/ getPixel – turtleboy

+0

我不是在談論getPixel(...)的方法,我正在討論getPixels(...)(注意's')這會將所有像素顏色數據加載到int []中。這不是你所追求的嗎?你在談論的GC開銷在哪裏? –

+0

啊抱歉錯過了你的觀點。是的,我會嘗試,因爲只有在調用位圖類。謝謝 – turtleboy

0

要填充它,您必須遍歷位圖來設置每個像素。這就是說,我不知道你是否會看到主要的業績增長。

+0

@haphazard嗨,爲什麼3個數組?不是每個像素以int值存儲的顏色嗎? – turtleboy

+0

我的錯誤 - 我已經更新了我的答案。 – Haphazard

+0

@haphazard該方法samleImage在扭曲圖像中扮演一個角色,並且不會對位圖設置器/獲取器進行很多調用。這是我認爲影響GC的這些呼叫。該應用程序運行良好,除了顯示位圖時,我認爲只顯示頂部的一行像素,其餘的位圖是黑色的。我認爲這是我如何輸入像素到數組或其他東西或循環概率 – turtleboy