我正在创建一个太空入侵者游戏,我希望所有图像与屏幕分辨率成比例。这意味着它可以在所有屏幕尺寸上使用,所有图像都会缩小或变大,以便它们适合屏幕。游戏是全屏的。最简单的技术是什么?这也是设置一切尺寸的最佳方式吗?
答案 0 :(得分:5)
你有没看过Image#getScaledInstance()虽然它有垮台(The Perils of Image.getScaledInstance()),但问题是:
Image.getScaledInstance()不返回已完成的缩放图像。它 当图像像素出现时,大部分缩放工作都会延迟 使用。
由于这些垮台,您可能想要一种不同的方式来调整图像大小,您可以尝试这样的事情:
import javax.swing.ImageIcon;
import java.awt.image.BufferedImage;
import java.awt.Image;
import java.awt.Color;
import java.awt.Graphics2D;
import java.io.File;
import javax.imageio.ImageIO;
import java.awt.RenderingHints;
public class ImgUtils {
public BufferedImage scaleImage(int WIDTH, int HEIGHT, String filename) {
BufferedImage bi = null;
try {
ImageIcon ii = new ImageIcon(filename);//path to image
bi = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = (Graphics2D) bi.createGraphics();
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY));
g2d.drawImage(ii.getImage(), 0, 0, WIDTH, HEIGHT, null);
} catch (Exception e) {
e.printStackTrace();
return null;
}
return bi;
}
}
你会像以下一样使用它:
BufferedImage img=new ImgUtils().scaleImage(50,50,"c:/test.jpg");
//now you have a scaled image in img
参考文献:
答案 1 :(得分:1)
假设g是Graphics2D对象的实例,而image是您要绘制的Image,xFactor和yFactor是x和y的缩放因子,请尝试:
AffineTransformation scaleTransformation = AffineTransformation.getScaleInstance(xFactor, yFactor);
g.draw(theImage, scaleTransformation, null);
答案 2 :(得分:1)
Image getScaledImage(Image Img, int wt, int ht) {
BufferedImage resizedImg = new BufferedImage(wt, ht, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = resizedImg.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2.drawImage(Img, 0, 0, wt, ht, null);
g2.dispose();
return resizedImg;
}