Если я рисую строку на графике (с измененного изображения) в определенной позиции, почему позиция 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 кожи:
Большое спасибо всем, кто мог бы дать мне советы о том, как зол эта проблема и начать строку всегда в позиции, не считая используемую скин (и устройство)!
С уважением,
Спасибо @Shai! Компонент рисования действительно находится на экране 'f.setLayout (новый LayeredLayout()); \t \t final Рисунок этикетки = новый Метка(); \t \t f.addComponent (рисунок); ' Следует ли добавить компонент рисования в другую форму, которая отсутствует на экране, а затем сохранить (снять снимок) эту другую форму, чтобы строка не перемещалась? – HelloWorld
Я не понимаю. В моем методе красок я использовал ширину и высоту с автомобильной фотографии Mercedes (они такие же размеры, что и у Gimp). Я также рисую прямоугольник в правом нижнем углу по ширине; высота. Зеленая точка - именно то, что я ожидаю. Кроме того, я знаю, что M от Mercedes на ветровом стекле находится по адресу (848; 610). Итак, почему верхний левый угол строки Hello World не начинается здесь? Вы имеете в виду, что это нормальное поведение? Тогда какое использование аргументов прохождения позиции для drawString() ;-)? Cheers – HelloWorld
Существует большая часть, отсутствующая между красками и 'paintComponent', которые я принимаю во всех вызовах обратного вызова paint(). Я предлагаю, чтобы вместо использования 'paintComponent' вы называете' краски 'непосредственно от вашего кода рендеринга изображений и тем самым избегаете потенциальных проблем перевода. –