Pregunta

BufferedImage bufferedImage = ImageIO.read(new File("/...icon.jpg"));

// this writes the bufferedImage into a byte array called resultingBytes
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();

ImageIO.write(bufferedImage, "jpg", byteArrayOut);

byte[] resultingBytes = byteArrayOut.toByteArray();

Yo uso el código de arriba para obtener una imagen JEPG como una matriz de bytes. Quiero saber exactamente lo que está en esta matriz de bytes. ¿Esta serie contiene ninguna información de encabezado del archivo o valores de píxel solo? Y, por ejemplo, si quiero invertir el color de esta imagen, lo que es una buena manera de hacerlo? Gracias tanto!

¿Fue útil?

Solución

El ByteArrayOutputStream contiene todo lo que escribió a ella. Nada más y nada menos. Entonces, la pregunta es realmente sobre ImageIO.write (). Que escribe a cabo una codificación de una imagen de acuerdo con el tipo de codificación que usted provee. Que era JPEG.

Otros consejos

Es un archivo completo JPEG, en la memoria.

EDIT: Si se quiere manipular los datos de píxeles como una matriz, es posible Raster más útiles:

por ejemplo:.

Raster raster = bufferedImage.getData();

A continuación, puede llamar a uno de los métodos Raster.getPixels.

Esta es la forma en que lee los valores de píxeles reales. La información JPEG es mucho más difícil de hacer cualquier cosa con!

public static void main(String... args) throws IOException {
    String u = "http://blog.stackoverflow.com/wp-content/uploads/stackoverflow-logo-300.png";

    BufferedImage old = ImageIO.read(new URL(u));
    BufferedImage inverted = new BufferedImage(old.getWidth(),
                                               old.getHeight(),
                                               BufferedImage.TYPE_INT_RGB);


    for (int y = 0; y < old.getHeight(); y++) {
        for (int x = 0; x < old.getWidth(); x++) {
            Color oldColor = new Color(old.getRGB(x, y));

            // reverse all but the alpha channel
            Color invertedColor = new Color(255 - oldColor.getRed(),
                                            255 - oldColor.getGreen(),
                                            255 - oldColor.getBlue());

            inverted.setRGB(x, y, invertedColor.getRGB());
        }
    }

    ImageIO.write(inverted, "png", new File("test.png"));
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top