gpt4 book ai didi

java - Java 的图像缩放之类的 9 补丁?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:29:18 25 4
gpt4 key购买 nike

我不确定这是不是该问的地方,但我想知道在 android 上是否有类似 9 补丁图像的东西,但对于 Java,如 Oracle、PC java。我所有的谷歌搜索都只显示 android,因为人们称它为 Java,但实际上并不相同。

我找到了 LibGdx,但对于我正在寻找的单一九补丁功能来说,它非常重要。

九 block 图像是指具有“9”个区域的图像,通常边角“未缩放”,而侧壁和中心区域会拉伸(stretch)以适合屏幕。来自 Android 的示例:http://developer.android.com/tools/help/draw9patch.html

有人知道可以像这样扩展的东西吗?我需要可以支持 PNG 的东西。

最佳答案

如果您正在寻找在 Java 组件上使用 9 补丁图像的方法,我在这里问了同样的问题:How use a 9-patch image as background on a JPanel?简短的回答是否定的,你不能。

长一点的是:如果将图像拆分为 9 个图像(边框、角和中心)并创建一个组件,该组件在重绘时移动并调整图像大小。

以下示例适用于我的情况:

  • 该组件是一个 JPanel。
  • 面板的中心必须是透明的,所以我需要少一张图片。
  • 组件不会小于给定的图像。
  • 图像具有透明度,这解释了代码中的 setOpaque(false) 调用。
  • 代码是草稿。

这里是代码:

public class NinePatchLikePanel extends JPanel{
private JPanel corner_top_l;
private JPanel corner_top_r;
private JPanel corner_bot_l;
private JPanel corner_bot_r;

private JPanel border_ver_l;
private JPanel border_ver_r;
private JPanel border_hoz_t;
private JPanel border_hoz_b;

private int min_width, min_height;

private int corners_width;
private int corners_height;
private int borders_width;
private int borders_height;


public NinePatchLikePanel (String[] urls) {

if(urls.length != 8) {
throw new UnsupportedOperationException("Exception to be managed!");
} else {
corner_top_l = new JPanelWithBackground (urls [0]);
corner_top_r = new JPanelWithBackground (urls [1]);
corner_bot_r = new JPanelWithBackground (urls [2]);
corner_bot_l = new JPanelWithBackground (urls [3]);

border_hoz_t = new JPanelWithBackground (urls [4]);
border_ver_r = new JPanelWithBackground (urls [5]);
border_hoz_b = new JPanelWithBackground (urls [6]);
border_ver_l = new JPanelWithBackground (urls [7]);

corners_width = corner_top_l.getWidth();
corners_height = corner_top_l.getHeight();

borders_width = border_hoz_t.getWidth();
borders_height = border_ver_l.getHeight();

min_width = 2 * corners_width + borders_width;
min_height = 2 * corners_height + borders_height;

this.setSize (min_width, min_height );
this.setMinimumSize ( new Dimension (min_width, min_height) );
this.setOpaque(false);
this.setLayout(null);
this.add(corner_top_l);
this.add(corner_top_r);
this.add(corner_bot_l);
this.add(corner_bot_r);

this.add(border_hoz_t);
this.add(border_ver_r);
this.add(border_hoz_b);
this.add(border_ver_l);
}
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);

int actual_width = this.getWidth();
int actual_height = this.getHeight();

int _x = actual_width - corners_width;
int _y = actual_height - corners_height;

corner_top_l.setLocation(0, 0);
corner_top_r.setLocation(_x, 0);
corner_bot_l.setLocation(0, _y);
corner_bot_r.setLocation(_x, _y);

int new_borders_width = _x - corners_width;
int new_borders_height = _y - corners_height;


border_hoz_t.setLocation(corners_width, 0);
border_hoz_t.setSize(new_borders_width, border_hoz_t.getHeight());

border_ver_r.setLocation(_x, corners_height);
border_ver_r.setSize(border_ver_r.getWidth(), new_borders_height);

border_hoz_b.setLocation(corners_width, _y);
border_hoz_b.setSize(new_borders_width, border_hoz_b.getHeight());

border_ver_l.setLocation(0, corners_height);
border_ver_l.setSize(border_ver_l.getWidth(), new_borders_height);
}

}

这里是 JPanelWithBackground 类的代码:

public class JPanelWithBackground extends JPanel { 
Image bg = null;

public JPanelWithBackground(String url) {
try{
bg = ImageIO.read(getClass().getResourceAsStream(url));
int height = bg.getHeight(null);
int width = bg.getWidth(null);
Dimension d = new Dimension(width,height);
this.setSize (width, height);
this.setMinimumSize ( d );
this.setOpaque(false);
} catch (IOException ex) {
//TODO: Manage this exception in a better way
System.err.println(ex);
System.exit(1);
}
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (bg != null)
g.drawImage(bg, 0, 0, this.getWidth(), this.getHeight(), null);
}
}

关于java - Java 的图像缩放之类的 9 补丁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20159316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com