2016-06-10 1 views
1

Если я рисую строку на графике (с измененного изображения) в определенной позиции, почему позиция String перемещается (по оси Y) в зависимости от используемого скина симулятора?Почему строка, нарисованная на объекте Graphics, меняет свое положение в зависимости от используемого скина?

public void paints(Graphics g, Image background, Image watermark, int width, int height) { 

g.drawImage(background, 0, 0); 
g.drawImage(watermark, 0, 0); 
g.setColor(0xFF0000); 

// Upper left corner 
g.fillRect(0, 0, 10, 10); 

// Lower right corner 
g.setColor(0x00FF00); 
g.fillRect(width - 10, height - 10, 10, 10); 

g.setColor(0xFF0000); 
Font f = Font.createTrueTypeFont("Geometos", "Geometos.ttf").derive(220, Font.STYLE_BOLD); 
g.setFont(f); 
// Draw a string right below the M from Mercedes on the car windscreen (measured in Gimp) 
g.drawString("HelloWorld", 
     (int) (848), 
     (int) (610) 
     ); 

} 

Это путь я сохранить скриншот программно с CodenameOne:

Image screenshot = Image.createImage(photoBase.getWidth(), photoBase.getHeight()); 
    f.revalidate(); 
    f.setVisible(true); 
    drawing.paintComponent(screenshot.getGraphics(), true); 

    String imageFile = FileSystemStorage.getInstance().getAppHomePath() + "screenshot.png"; 
    try(OutputStream os = FileSystemStorage.getInstance().openOutputStream(imageFile)) { 
     ImageIO.getImageIO().save(screenshot, os, ImageIO.FORMAT_PNG, 1); 
    } catch(IOException err) { 
     err.printStackTrace(); 
    } 

И вот результат с iPhone 6 кожи: iPhone 6Screenshot

И с кожей Xoom: Xoom Screenshot

Большое спасибо всем, кто мог бы дать мне советы о том, как зол эта проблема и начать строку всегда в позиции, не считая используемую скин (и устройство)!

С уважением,

ответ

0

ли "рисунок" компонент на экране?

Если это так, то оно будет отличаться в зависимости от конкретного устройства, на котором вы работаете, поскольку каждое устройство имеет разную плотность/разрешение. Таким образом, элементы с экрана будут отображаться в разных положениях, что мы хотим нормально.

+0

Спасибо @Shai! Компонент рисования действительно находится на экране 'f.setLayout (новый LayeredLayout()); \t \t final Рисунок этикетки = новый Метка(); \t \t f.addComponent (рисунок); ' Следует ли добавить компонент рисования в другую форму, которая отсутствует на экране, а затем сохранить (снять снимок) эту другую форму, чтобы строка не перемещалась? – HelloWorld

+0

Я не понимаю. В моем методе красок я использовал ширину и высоту с автомобильной фотографии Mercedes (они такие же размеры, что и у Gimp). Я также рисую прямоугольник в правом нижнем углу по ширине; высота. Зеленая точка - именно то, что я ожидаю. Кроме того, я знаю, что M от Mercedes на ветровом стекле находится по адресу (848; 610). Итак, почему верхний левый угол строки Hello World не начинается здесь? Вы имеете в виду, что это нормальное поведение? Тогда какое использование аргументов прохождения позиции для drawString() ;-)? Cheers – HelloWorld

+0

Существует большая часть, отсутствующая между красками и 'paintComponent', которые я принимаю во всех вызовах обратного вызова paint(). Я предлагаю, чтобы вместо использования 'paintComponent' вы называете' краски 'непосредственно от вашего кода рендеринга изображений и тем самым избегаете потенциальных проблем перевода. –