bytedeco/javacv

How to get byte[] more efficient?

Aperta

#2044 aperta il 17 giu 2023

 (6 commenti) (0 reazioni) (0 assegnatari)Java (1583 fork)batch import
help wantedquestion

Metriche repository

Star
 (6985 stelle)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

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?

Guida contributor