4

我正在创建一个太空侵略者游戏,我希望所有图像都与屏幕分辨率成比例。这意味着它可以在所有屏幕尺寸上使用,并且所有图像都会缩小或变大以适应屏幕。游戏是全屏的。最简单的技术是什么?这也是设置所有内容大小的最佳方法吗?

4

3 回答 3

5

你有没有看过Image#getScaledInstance()虽然它有它的缺点( 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

参考:

于 2012-09-18T10:54:02.180 回答
1

假设 g 是您的 Graphics2D 对象实例,theImage 是您要绘制的图像,xFactor 和 yFactor 是 x 和 y 的缩放因子,请尝试:

AffineTransformation scaleTransformation = AffineTransformation.getScaleInstance(xFactor, yFactor);
g.draw(theImage, scaleTransformation, null);
于 2012-09-18T10:53:30.733 回答
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;
}
于 2017-09-27T17:54:32.257 回答