bytedeco/javacv

How to get byte[] more efficient?

Ouverte

#2 044 ouverte le 17 juin 2023

 (6 commentaires) (0 réaction) (0 personne assignée)Java (1 583 forks)batch import
help wantedquestion

Métriques du dépôt

Stars
 (6 985 étoiles)
Métriques de merge PR
 (Métriques PR en attente)

Description

Application: Java client(FrameGrabber)->websocket.sendBinary->php Server(Imagick->readImageBlob)

grabber = FrameGrabber.createDefault(1);
grabber.setFormat("dshow");
grabber.setBitsPerPixel(8);
grabber.setImageWidth(1920);
grabber.setImageHeight(1080);
grabber.start();
System.out.println("Before frameToByteArray Time: " + System.currentTimeMillis());
byte[] imageBytes = frameToByteArray(frameMat);
System.out.println("After frameToByteArray Time: " + System.currentTimeMillis());
// Send image data as binary message
websocket.sendBinary(imageBytes);
public static byte[] frameToByteArray(Frame frame) throws IOException {
    BufferedImage image = Java2DFrameUtils.toBufferedImage(frame);
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    javax.imageio.ImageIO.write(image, "jpg", os);
    return os.toByteArray();
}

Result

Before frameToByteArray Time: 1687021694023
After frameToByteArray Time: 1687021694124

Time needed for such Frame to byte[] operation is about 100ms

Is there more efficient way? Can i get byte[] directly from Frame and php Imagick can decode it?

Guide contributeur