2011-10-21 14 views
8

Mam tablicę MxN z intami reprezentującymi kolory (na przykład format RGBA, ale można to łatwo zmienić). Chciałbym przekonwertować je na bitmapę MxN lub coś innego (np. Teksturę OpenGL), którą mogę wyświetlić na ekranie. Czy istnieje szybki sposób na zrobienie tego? Pętla w tablicy i przeciąganie jej na płótno jest zbyt powolne.Konwertowanie tablicy int na bitmapę na Androida

Odpowiedz

15

Spróbuj to daje bitmapę.

// You are using RGBA that's why Config is ARGB.8888 
    bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); 
// vector is your int[] of ARGB 
    bitmap.copyPixelsFromBuffer(IntBuffer.wrap(vector)); 

EDIT:

//OR , you can generate IntBuffer from following native method 
    /*private IntBuffer makeBuffer(int[] src, int n) { 
     IntBuffer dst = IntBuffer.allocate(n*n); 
     for (int i = 0; i < n; i++) { 
      dst.put(src); 
     } 
     dst.rewind(); 
     return dst; 
    }*/ 

nadzieję, że to pomoże.

+0

W twoim 'makeBuffer' jest błąd. Zamiast tego wpisz bitmapę w ten sposób: 'bmp.copyPixelsFromBuffer (IntBuffer.wrap (wektor));' –

3

Tak, brzmi, jakbyś miał wszystkie potrzebne informacje. Jeśli M jest szerokością, a N jest wysokością, możesz utworzyć nową bitmapę za pomocą Bitmap.createBitmap i możesz wypełnić wartości ARGB metodą setPixels, która pobiera tablicę int.

Bitmap.createBitmap

Bitmap.setPixels

8

Dlaczego nie używać Bitmap.setPixel? Jest nawet poziom API 1:

int[] array = your array of pixels here... 
int width = width of "array"... 
int height = height of "array"... 

// Create bitmap 
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 

// Set the pixels 
bitmap.setPixels(array, 0, width, 0, 0, width, height); 

Możesz grać z offsetem/krokiem/x/y w razie potrzeby.
Brak pętli. Brak dodatkowych przydziałów.

Powiązane problemy