Galera, tenho o array de bytes referente a imagem que a Camera do celular capturou, mando ela por HTTP para p servlet, ele recebe tudo certo, mas agora não sei como criar essa imagem e salvar em disco, alguém tem alguam sugestão?
Acrescentando, criei esse código, ele cria a imagem, mas quando aberta, Visualização não disponível.
Segue o código…
InputStream is = req.getInputStream(); //req = request do doPost do servlet
int c = is.read();
File f = new File("C:\\teste.png");
if(!f.exists())
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
while((c = is.read()) != -1)
fos.write(c);
fos.close();
Galera, se alguém tiver o mesmo problema, consegui resolver.
Apenas tirei o is.read(); logo na inicialização da variável int c, e deixei os ‘is.read()’ apenas no laço :thumbup:
Surgindo outro problema, resolvi ressucitar o tópico.
Alguém já fez alguma exemplo de envio de imagem capturada do celular para um servlet?
Na verdade preciso a imagem serializada numa string, por questões de transmissão do projeto.
Usando a classe Base64 consigo transformar o array de bytes em string e vice-versa, mas quando vou exibir a imagem novamente, ela fica com as cores trocadas.
Segue o código de captura dos rgb em bytes.
public static byte[] getByteArray(Image image)
{
int raw[] = new int[image.getWidth() * image.getHeight()];
image.getRGB(raw, 0, image.getWidth(), 0, 0, image.getWidth(), image.getHeight());
byte rawByte[] = new byte[image.getWidth() * image.getHeight() * 4];
int n = 0;
for(int i = 0; i < raw.length; i++) {
int ARGB = raw[i];
int a = (ARGB & 0xff000000) >> 24;
int r = (ARGB & 0xff0000) >> 16;
int g = (ARGB & 0xff00) >> 8;
int b = ARGB & 0xff;
rawByte[n] = (byte)b;
rawByte[n + 1] = (byte)g;
rawByte[n + 2] = (byte)r;
rawByte[n + 3] = (byte)a;
n += 4;
}
raw = null;
return rawByte;
}
Edit:
Ou ainda, quem souber como retirar os bytes da imagem (bytes, e não os RGB como esse que passei), ficarei agradecido, pois quando pego os bytes do getSnapshot() do videoControl, consigo gerar a imagem normalmente no servidor…