Meine Frage bezieht sich auf this previous question. Was ich erreichen möchte, ist das Stapeln von Bildern (sie haben Transparenz), das Schreiben eines Strings und das Speichern der Fotomontage/Fotocollage mit voller Auflösung.Kann ein generiertes Bild in Codename One gespeichert werden?
@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)
);
}
Dies ist die gespeicherten Screenshot ich, wenn ich die Iphone6 Haut verwenden (die Nutzlast ist kleiner als das Original und ist zentriert). Wenn ich den Xoom-Skin benutze, bekomme ich (das Payload-Bild ist immer noch kleiner als das Originalbild, aber es ist nach links gerückt).
Um alles zusammenzufassen: Warum unterscheidet sich der gespeicherte Screenshot mit Xoom Haut von dem, den ich mit Iphone Haut bekomme? Gibt es überhaupt eine Möglichkeit, die Grafik, auf der ich in der LOLS-Methode male, direkt zu speichern, damit das gespeicherte Bild die ursprünglichen Abmessungen hat?
Vielen Dank an alle, die mir helfen könnten :-)!
Cheers,
Es ist ein bisschen schwer für mich, der vorherigen Frage zu folgen, da sie sehr lang ist. Ich empfehle, Fragen auf kleinere Einzelfragen zu reduzieren, um bessere Antworten zu erhalten. Fühlen Sie sich frei, so viele Fragen zu stellen, wie Sie möchten, solange sie gut formuliert/recherchiert sind. –
@Shai Richtig, der vorherige Beitrag ist zu lang. Empfiehlst du es zu bearbeiten und es KISS zu machen? – HelloWorld
Ich empfehle in Zukunft mehrere kleinere Fragen zu schreiben. –