2011-05-19 19 views
6

Estoy trabajando en un proyecto en el que estoy recibiendo datos de imágenes como una matriz de bytes (1 byte por píxel). Cada byte representa un entero de escala de grises (0-255).cómo convertir la matriz de bytes en una matriz de enteros

Para realizar una serie de funciones en los datos, necesito convertir la matriz de bytes en una matriz de enteros. por favor ayúdenme ...

Respuesta

15

¿Algo malo con el enfoque simple?

public static int[] convertToIntArray(byte[] input) 
{ 
    int[] ret = new int[input.length]; 
    for (int i = 0; i < input.length; i++) 
    { 
     ret[i] = input[i] & 0xff; // Range 0 to 255, not -128 to 127 
    } 
    return ret; 
} 

EDIT: Si desea un rango de -128 a 127:

public static int[] convertToIntArray(byte[] input) 
{ 
    int[] ret = new int[input.length]; 
    for (int i = 0; i < input.length; i++) 
    { 
     ret[i] = input[i]; 
    } 
    return ret; 
} 
+1

este arco cabeza es para la velocidad de la que responder a las preguntas, pensé para responder a la pregunta, en el medio segundo i alarmado como su respuesta es – developer

+0

de -128 a 127 ¿qué hacer extra? –

+1

Deje el enmascaramiento de bits que indicará extender el byte. Y sí, estoy de acuerdo con Damodar ... casi espeluznante: ¿tal vez Google finalmente creó una IA que puede pasar la prueba de Turing e intenta probarla en SO? :pag – Voo

1

Depende de la utilización de la matriz int resultado, pero normalmente, la conversión de una matriz de bytes o ByteBuffer en un entero array significa "wraping" 4 bytes en 1 entero, por ejemplo para mapas de bits, por lo que en ese caso yo sugeriría la siguiente conversión:

IntBuffer ib = ByteBuffer.wrap(input).order(ByteOrder.BIG_ENDIAN).asIntBuffer(); 
int[] ret = new int[ib.capacity()]; 
ib.get(ret); 
return ret; 
Cuestiones relacionadas