Отображение изображения в GridBagLayout Java - PullRequest
0 голосов
/ 25 июня 2009

Мое изображение передается в мою программу с сервера и сохраняется в виде строки. Я хочу преобразовать эту строку в изображение, а затем отобразить это изображение в метке внутри GridBagLayout. Когда я выполняю код ниже, я получаю пустую рамку. Нет исключений во время исполнения. Когда я смотрю на объект изображения из ToolKit в отладке, он говорит, что высота и ширина равны -1 (но у «imagedata» в source = ByteArrayImageSource есть байт [5144]). Есть идеи?

Добавлено примечание: изображение хранится в программе в виде строки, поскольку данные сериализуются в C # и десериализуются в Java. Этот процесс, по-видимому, не нравится byte[] в процессе десериализации, поэтому я сохраняю его как строку и использую getBytes, когда хочу использовать изображение.

imageToDisplay = Toolkit.getDefaultToolkit().createImage(myString.getBytes());
ImageIcon logoIcon = new ImageIcon(imageToDisplay);
JLabel logolabel = new JLabel(logoIcon);
mainPanel.add(logolabel, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0,
                GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, 
                new Insets(2, 2, 2, 2), 0, 0));
mainFrame.add(mainPanel, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0,
                GridBagConstraints.CENTER, GridBagConstraints.BOTH, 
                new Insets(2, 2, 2, 2), 0, 0));

Ответы [ 3 ]

0 голосов
/ 25 июня 2009

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

Использование ISO-8859-1 будет работать в большинстве случаев, так как эта кодировка отображает байты от 0 до 255 на символы от U + 0000 до U + 00FF.

Конечно, вы должны убедиться, что данные не были искажены, когда вы конвертировали их в строку в C # (вы также можете указать там кодировку ...).

0 голосов
/ 26 июня 2009

Оказывается, это была моя вина. В коде, который я написал выше, нет ничего плохого, кроме того, что я забыл декодировать строку изображения. Он передается с сервера в кодировке Base64, и я использовал getBytes для этой закодированной строки и передаю это в функцию «createImage». Спасибо за ваши предложения и помощь. Правильный код ниже:

try 
{
        imageToDisplay = Toolkit.getDefaultToolkit().createImage(Base64.decode(myString));
} catch (Exception e1) {
        //          // TODO Auto-generated catch block
        e1.printStackTrace();
}

ImageIcon logoIcon = new ImageIcon(imageToDisplay);
JLabel logolabel = new JLabel(logoIcon);
mainPanel.add(logolabel, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0,
    GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, 
    new Insets(2, 2, 2, 2), 0, 0));
0 голосов
/ 25 июня 2009

Сначала вам нужно выяснить, является ли проблема изображением или макетом. Сделайте предложение mmyers и поместите это панель (возможно отдельно) с FlowLayout. Если это все еще не обнаруживается, это могло бы изображение. Есть ли причина, по которой входные данные преобразуются в строку? Набор символов по умолчанию может быть не в состоянии обработать преобразование чисто (т. Е. Байты -> строка -> байты могут не давать одинаковые начальные байты).

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