Exacto, el tener que guardarlos y recuperarlos del HDD es demasiado costoso. El código es algo extenso (sobre unas 7 u 8 clases), quizás demasiado para lo que aquí interesa resolver.
Emisor
Este código recupera una captura de pantalla que transforma a int[] para enviarla por el socket.
Receptor
Se encarga de recibir el int[] y recomponerlo.
Y con este último código copiado de internet y que no comprendo muy bien recupero el BufferedImage inicial
Emisor
Este código recupera una captura de pantalla que transforma a int[] para enviarla por el socket.
Código (java) [Seleccionar]
int ancho = (int) java.awt.Toolkit.getDefaultToolkit().getScreenSize().getWidth();
int alto = (int) java.awt.Toolkit.getDefaultToolkit().getScreenSize().getHeight();
v = new int[ancho*alto];
dataBuffer = robot.createScreenCapture(rectangulo).getData().getDataBuffer(); //Captura la pantalla
for(int i = 0; i < ancho*alto; i++)
v[i] = dataBuffer.getElem(i);
Receptor
Se encarga de recibir el int[] y recomponerlo.
Código (java) [Seleccionar]
// Creo un ByteBuffer donde añado v (byte[])
// v es el int[] que envié y que recibo en forma de 4 bytes por int.
ByteBuffer bb = ByteBuffer.allocate(v.length);
bb.put(v);
bb.order(ByteOrder.BIG_ENDIAN);
bb.rewind();
// Ahora transformo ese ByteBuffer en un IntBuffer
IntBuffer ib = bb.asIntBuffer();
int[] result = new int[v.length / 4];
ib.get(result);
BufferdedImage imagen = generarBufferedImage(result); //este método está implementando en el código de abajo.
Y con este último código copiado de internet y que no comprendo muy bien recupero el BufferedImage inicial
Código (java) [Seleccionar]
private BufferedImage generarBufferedImage(int[] v)
{
DataBufferInt DB = new DataBufferInt(v, (resolucion.getAncho() * resolucion.getAlto()), 0);
int[] BM = new int[]
{ 0xff0000, 0xff00, 0xff };
SinglePixelPackedSampleModel SM = new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT, resolucion.getAncho(), resolucion.getAlto(), BM);
// creating the raster
Point P = new Point(0, 0);
WritableRaster R = Raster.createWritableRaster(SM, DB, P);
BufferedImage bi = new BufferedImage(resolucion.getAncho(), resolucion.getAlto(), BufferedImage.TYPE_INT_RGB);
BufferedImage BI = new BufferedImage(bi.getColorModel(), R, false, null);
return BI;
}