在GWT中缩放图像

Dan*_*iel 22 java gwt image-scaling

改变的大小的图像在GWT部件改变所述图像元素的大小,但不重新调整屏幕上的图像.因此,以下方法不起作用:

Image image = new Image(myImageResource);
image.setHeight(newHeight);
image.setWidth(newWidth);
image.setPixelSize(newWidth, newHeight);
Run Code Online (Sandbox Code Playgroud)

这是因为GWT 通过使用CSS 将HTML 元素设置为图像来实现其Image小部件.background-image<img... />

如何让实际图像调整大小?

Dan*_*iel 34

我看到了这个博客条目,它通过使用GWT DataResource而不是ImageResource来解决问题.事实证明,相同的技术实际上将与ImageResource一起使用,如果您按如下方式使用它:

Image image = new Image(myImageResource.getURL());
image.setPixelSize(getLength(), getHeight());
Run Code Online (Sandbox Code Playgroud)

保持宽高比计算如下:

Image image = new Image(myImageResource.getURL());
image.setPixelSize(newWidth, myImageResource.getHeight() * newWidth / myImageResource.getWidth());
Run Code Online (Sandbox Code Playgroud)

从GWT 2.4开始,使用(见这里):

Image image = new Image(myImageResource.getSafeUri());
image.setPixelSize(newWidth, myImageResource.getHeight() * newWidth / myImageResource.getWidth());
Run Code Online (Sandbox Code Playgroud)

  • @adranale:你可以总是计算正确的口粮(这是社区维基) (2认同)
  • 我的问题是,我认为它有点挫败了`ImageResource`的目的,不是吗?这不意味着每次调用此方法时都会从服务器加载图像吗? (2认同)

Hus*_*sar 11

如果我们想在UIbinder中做同样的事情.从外部资源然后:

例如,我们有资源

@Source("images/logo.png")
ImageResource getLogo();
Run Code Online (Sandbox Code Playgroud)

在UiBinder模板中声明<ui:with>元素:

<ui:with field='res' type='com.myapp.client.Resources'/>
Run Code Online (Sandbox Code Playgroud)

及以下:

<g:Image url='{res.getLogo.getSafeUri.asString}'  pixelSize="Width, Height" />
Run Code Online (Sandbox Code Playgroud)

在较旧的GWT版本中:

<g:Image url='{res.getLogo.getURL}'  pixelSize="Width, Height" />
Run Code Online (Sandbox Code Playgroud)

但现在 - 已弃用.

不使用:

<g:Image resource='{res.getLogo}' pixelSize="Width, Height" />
Run Code Online (Sandbox Code Playgroud)

因为它不会缩放图像

  • 仅供参考,您可以用数值替换"宽度"和"高度",例如.<g:Image url ='{res.getLogo.getSafeUri.asString}'pixelSize ="32,32"/> (2认同)