Как применить поток изображений к графическому интерфейсу - PullRequest
0 голосов
/ 06 апреля 2019

Я работаю на IM-клиенте, в настоящее время я пытаюсь настроить потоковую передачу веб-камеры по протоколу http.

Сервер возвращает веб-страницу, содержащую двоичные данные в кодировке base64 из источника.

Я пробовал всевозможные эксперименты с установкой статуса значка метки с помощью изображения в кодировке base64, предоставляемого сервером

package net.undergroundim.client.gui;

import java.awt.EventQueue;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.util.Base64;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class tmp {

    private JFrame frame;
    private static JLabel lblNewLabel;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    tmp window = new tmp();
                    window.frame.setVisible(true);
                    while (true) {
                        Thread.sleep(5);
                        String src = "";
                        src = URLSrc.getURLSource("http://127.0.0.1:9991/video");
                        byte[] decodedString = Base64.getDecoder().decode(src);
                        if(decodedString.length > 25) {
                        InputStream in = new ByteArrayInputStream(decodedString);

                            BufferedImage bImageFromConvert = ImageIO.read(in);

                            getLblNewLabel().setIcon(new ImageIcon(bImageFromConvert));
                            getLblNewLabel().revalidate();
                            getLblNewLabel().repaint();

                    }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        });
    }

    /**
     * Create the application.
     */
    public tmp() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        lblNewLabel = new JLabel();
        lblNewLabel.setIcon(new ImageIcon(tmp.class.getResource("/icons/earth-icon.png")));
        lblNewLabel.setBounds(0, 0, 428, 244);
        frame.getContentPane().add(lblNewLabel);
        lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);

    }
    public static JLabel getLblNewLabel() {
        return lblNewLabel;
    }
}

Данные base64, возвращаемые через http, должны быть декодированы в изображение, отображаемое наэлемент управления меткой, использующий setIcon (), однако, когда я пытаюсь добавить в декодированные байты метку, она просто отображается как пустая

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...