2013-07-23 101 views
2

我想將一個標準的.jpeg圖像轉換成一個Color值的數組,它通過Bitmap的getPixels方法存儲爲int值。我的代碼將加載到圖像中並將其數據發送到一維int數組,但是當我將它們與原始圖像進行比較時,其中一些值沒有任何意義。我知道圖像正在被正確讀取,因爲我的程序將其打印到屏幕上。有誰知道爲什麼我的輸出包含這些奇怪的值?位圖返回奇怪顏色值

 /* Test */ 
    ImageView image = (ImageView) findViewById(R.id.imageView1); 
    Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.testsmall); 
    image.setImageBitmap(bMap); 

    int[] pixels = new int[bMap.getHeight() * bMap.getWidth()]; 

    bMap.getPixels(pixels, 0, bMap.getWidth(), 0, 0, bMap.getWidth(), bMap.getHeight()); 

    int[][] colors2D = new int[bMap.getWidth()][bMap.getHeight()]; 
    Log.i("State", "Start"); 
    for (int x = 0; x < bMap.getWidth(); x++) 
    { 
     for (int y = 0; y < bMap.getHeight(); y++) 
     { 
      colors2D[x][y] = pixels[x + y * bMap.getWidth()]; 
      Log.i("Inside", "X: " + x + ", Y: " + y + ", Pixel: " + pixels[x + y * bMap.getWidth()]); 
     } 
     Log.i("Outside", "New Line"); 
    } 
    Log.i("State", "End"); 
    /* End Test */ 

額外的信息:

下包含了這部分程序的logcat的輸出。奇怪的價值在這裏。 Android的Color類將白色定義爲-1,將黑色定義爲-16777216。

http://pastebin.com/GxF4j0ef

這是testSmall.jpg。你可以看到它很小。只測量16x16。

https://www.dropbox.com/s/8hbbopoaozuu9ya/testSmall.jpg

+1

僅供參考 - 你通常給十六進制顏色。這樣你可以很容易地分解它 - 前2個字符是透明的,接下來的2個是紅色,然後是綠色,然後是藍色。所以白色是FFFFFFFF,黑色是FF000000紅色是FFFF0000等。這種方式比較容易。 –

+0

Android在表示顏色時將這些十六進制數字表示爲二進制。這裏的顏色類文檔給出了一些例子。 http://developer.android.com/reference/android/graphics/Color.html – BitBoy

+0

Android是否有內置的二進制數字轉換爲十六進制字符串值的方法? – BitBoy

回答

2

事實證明,在圖像正在被Android O.S.縮放因爲我把它放在可繪製的文件夾中。事實證明,如果你不想讓圖像縮放,你應該把它放在名爲drawable-nodpi的文件夾中。下面的鏈接幫助我弄清楚了這一點。

Bitmap getWidth returns wrong value