Codenameone 共享绘制在比屏幕本身更大的图形上的图像

Codenameone 共享绘制在比屏幕本身更大的图形上的图像,codenameone,Codenameone,下面的代码将在图像图形上绘制组件,但它将对其进行转换,而不是使其适合图形的大小 int ratio = 2; Image screenshotImage = Image.createImage(getWidth()* ratio,getHeight()* ratio); c.revalidate(); c.setVisible(true); c.paintComponent(screenshotImage.getGraphics(), true); 我不能使用图像的缩放,因为一些内容将被截断。

下面的代码将在图像图形上绘制组件,但它将对其进行转换,而不是使其适合图形的大小

int ratio = 2;
Image screenshotImage = Image.createImage(getWidth()* ratio,getHeight()* ratio);
c.revalidate();
c.setVisible(true);
c.paintComponent(screenshotImage.getGraphics(), true);
我不能使用图像的缩放,因为一些内容将被截断。 组件可以在具有指定大小的图像图形上绘制自身

非常感谢使用:

c.setX(0);
c.setY(0);
c.setWidth(img.getWidth());
c.setHeight(img.getHeight());
if(c instanceof Container) {
   c.setShouldLayout(true);
   c.layoutContainer();
}
c.remove();
c.paintComponent(myImage.getGraphics(), true);
// add c back to it's parent container and revalidate
如果组件当前位于表单上,您可能希望在之后调用父表单上的重新验证来撤消所有这些操作。

使用:

c.setX(0);
c.setY(0);
c.setWidth(img.getWidth());
c.setHeight(img.getHeight());
if(c instanceof Container) {
   c.setShouldLayout(true);
   c.layoutContainer();
}
c.remove();
c.paintComponent(myImage.getGraphics(), true);
// add c back to it's parent container and revalidate

如果组件当前位于表单上,您可能希望通过调用父表单上的重新验证来撤消所有这些操作。

setShouldLayout受保护,因此我通过重写并添加一个方法创建了新的容器类,该方法将恢复您的所有代码。不起作用。Yeha我复制并粘贴并将宽度/高度设置为0。现在修复了。更好了-它在图像上绘制组件-但只剪辑可见的屏幕-我们可以全部获得吗?好的,我忽略了提到我在示例中添加的删除位。由于没有父级,组件不会尝试剪裁或转换为父级坐标spacesetShouldLayout受到保护,因此我通过重写并添加一个方法创建了新的容器类,该方法将保存所有代码。不起作用。Yeha我复制并粘贴并将宽度/高度设置为0。现在修复了。更好了-它在图像上绘制组件-但只剪辑可见的屏幕-我们可以全部获得吗?好的,我忽略了提到我在示例中添加的删除位。由于没有父对象,组件将不会尝试剪裁或平移到父坐标空间