我想设置图像的大小 通过 json 服务。 ???
这是我的代码
public void getImage(){
try {
URL url = new URL("https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=good%20idea%20good%20idea%20water%20jug%20water%20jug%20thirsty%20crow%20thirsty%20crow%20long%20time%20long%20time%20jug%20jug");
URLConnection connection = url.openConnection();
String line;
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
while ((line = reader.readLine()) != null) {
builder.append(line);
}
JSONObject json = new JSONObject(builder.toString());
String imageUrl = json.getJSONObject("responseData").getJSONArray("results").getJSONObject(0).getString("url");
BufferedImage image = ImageIO.read(new URL(imageUrl));
ImageIcon img = new ImageIcon(image);
JLabel label = new JLabel("", img, JLabel.CENTER);
jPanel1.add( label, BorderLayout.CENTER );
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Failure", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}
}
我在jPanel中显示图像。我想设置图像的大小,使其必须小于面板大小。我怎样才能实现这个????
如果你不关心结果的质量,你可以使用 Image#getScaledInstance
,但你应该先阅读一下 Image.getScaledInstance() 的危险
Image scaled = image.getScaledInstance(jPanel1.getWidth(), jPanel1.getHeight(), Image.SCALE_SMOOTH);
但这不会保持图像的纵横比,要做到这一点,你必须决定哪个维度更重要。
int width = jPanel1.getWidth();
int height = jPanel1.getHeight();
if (width < height) {
height = -1;
} else {
width = -1;
}
Image scaled = image.getScaledInstance(width, height, Image.SCALE_SMOOTH);
查看Java:保持JPanel背景图像的纵横比以获取更多详细信息
现在,如果你关心结果图像的质量,那么你需要使用不同的缩放方法,你可以使用类似分而治之的方法,如调整大小非常低后的图像质量所示 - Java或使用第三方库,如ImgSclr
现在,你的下一个问题是,组件的大小通常是根据其子级的需求计算的。 在这种情况下,这意味着jPanel1
可能希望使用JLabel
的大小来确定它应该有多大。 同样,JLabel
将使用图像的大小来确定它应该有多大。 这会让你陷入第 22 条军规的问题。
您可以使用一个允许图像占据大面积然后可用的JScrollPane
或者您需要一个动态面板,该面板可以根据可用空间自动调整图像大小,但您仍然需要确定"默认"或"首选"大小应该是多少
试试这个:
resized = Bitmap.createScaledBitmap(yourBitmap,(int)(yourBitmap.getWidth()*0.8), (int)(yourBitmap.getHeight()*0.8), true);