web-dev-qa-db-fra.com

Tableau d'octets en objet Image

On me donne un tableau d'octets [] dans Java qui contient les octets d'une image, et je dois le sortir dans une image. Comment pourrais-je faire cela?

Merci beaucoup

52
BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes));
86
Nick Veys

Si vous connaissez le type d'image et souhaitez uniquement générer un fichier, il n'est pas nécessaire d'obtenir une instance BufferedImage. Écrivez simplement les octets dans un fichier avec l'extension correcte.

OutputStream out = null;

try {
    out = new BufferedOutputStream(new FileOutputStream(path));
    out.write(bytes);
} finally {
    if (out != null) out.close();
}
23
Sam Barnum
From Database.
Blob blob = resultSet.getBlob("pictureBlob");               
byte [] data = blob.getBytes( 1, ( int ) blob.length() );
BufferedImage img = null;
try {
img = ImageIO.read(new ByteArrayInputStream(data));
} catch (IOException e) {
    e.printStackTrace();
}
drawPicture(img);  //  void drawPicture(Image img);
3
Usman

Comme il semble que vous sachiez déjà dans quel format le tableau d'octets [] est (par exemple RGB, ARGB, BGR, etc.), vous pourriez être en mesure d'utiliser BufferedImage.setRGB (...) , ou un combinaison de BufferedImage.getRaster () et WritableRaster.setPixels (...) ou WritableRaster.setSamples (...) . Malheureusement, ces deux méthodes nécessitent que vous transformiez votre octet [] en int [], float [] ou double [] selon le format d'image.

2
Kevin Loney

Selon les documents Java, il semble que vous devez utiliser la classe MemoryImageSource pour placer votre tableau d'octets dans un objet en mémoire, puis utiliser Component.createImage ( ImageProducer) suivant (en passant votre MemoryImageSource, qui implémente ImageProducer).

1
Platinum Azure