我的問題與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的皮膚得到不同?無論如何要直接保存我在塗料方法中繪製的圖形,以便保存的圖像具有原始尺寸?
非常感謝任何人,可以幫助我:-)!
乾杯,
這是一個有點難受,按照前面的問題,因爲它是非常長的。我建議將問題分解爲較小的個人問題以獲得更好的答案。隨意問你喜歡的任何問題,只要他們的措辭很好/研究 –
@Shai上一篇文章太長了。你是否建議編輯它並使其成爲KISS? – HelloWorld
我建議將來寫更多的小問題。 –