Мой вопрос связан с this previous question. То, что я хочу достичь, это стекирование изображений (они имеют прозрачность), запись строки сверху и сохранение фотомонтажа/фотоколлажа с полным разрешением.Возможно ли сохранить сгенерированное изображение в Codename One?
@Override
protected void beforeMain(Form f) {
Image photoBase = fetchResourceFile().getImage("Voiture_4_3.jpg");
Image watermark = fetchResourceFile().getImage("Watermark.png");
f.setLayout(new LayeredLayout());
final Label drawing = new Label();
f.addComponent(drawing);
// Image mutable dans laquelle on va dessiner (fond blanc)
Image mutableImage = Image.createImage(photoBase.getWidth(), photoBase.getHeight());
drawing.getUnselectedStyle().setBgImage(mutableImage);
drawing.getUnselectedStyle().setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FIT);
// Paint all the stuff
paints(mutableImage.getGraphics(), photoBase, watermark, photoBase.getWidth(), photoBase.getHeight());
// Save the collage
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();
}
}
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)
);
}
Это сохраненная скриншот я получаю, если я использую Iphone6 кожи (полезная нагрузка изображения меньше, чем оригинал и по центру). Если я использую скин Xoom, это то, что я получаю (изображение полезной нагрузки по-прежнему меньше исходного изображения, но оно перемещено влево).
Итак, чтобы подвести итог: почему сохраненный снимок экрана с кожей Xoom отличается от той, которую я получаю с кожей Iphone? Есть ли в любом случае возможность сохранить графику, на которой я рисую в методе paintts, чтобы у сохраненного изображения были оригинальные размеры?
Большое спасибо всем, кто мог мне помочь :-)!
Приветствия,
Мне немного сложно следовать предыдущему вопросу, поскольку он чрезвычайно длинный. Я предлагаю разбить вопросы на более мелкие индивидуальные вопросы, чтобы получить лучшие ответы. Не стесняйтесь задавать столько вопросов, сколько хотите, если они хорошо сформулированы/исследованы. –
@Shai Правый предыдущий пост слишком длинный. Вы рекомендуете отредактировать его и сделать его KISS? – HelloWorld
Я рекомендую писать несколько меньших вопросов в будущем. –