-2
私が作成しているゲームのウィンドウ全体が画像を占めているにもかかわらず、現在読み込まれている画像を拡大縮小しようとしています。画像の縮尺に関する問題
私は3クラスファイルを持っている: -
たBufferedImage、
ファイター
ゲーム。
BufferedImageLoaderクラス: - :
import java.awt.image.BufferedImage;
public class Fighter {
private BufferedImage fighter;
public Fighter(BufferedImage image)
{
this.fighter = image;
}
public BufferedImage grabImage()
{
fighter.getHeight();
fighter.getWidth();
return fighter;
}
}
私は現在 -
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
public class BufferedImageLoader {
private BufferedImage image;
public BufferedImage loadImage(String path) throws IOException{
image = ImageIO.read(getClass().getResource(path));
return image;
}
}
レンダリングとpaintComponentこれは戦闘機クラスのコードです
private void render(){
BufferStrategy bs = this.getBufferStrategy();
if(bs == null){
createBufferStrategy(3);
return;
}
paintComponent(bs);
}
public void paintComponent(BufferStrategy bs){
//Graphics g) {
//AffineTransform at = AffineTransform.getTranslateInstance(100, 100);
//at.scale(0.5, 0.5);
Graphics g = bs.getDrawGraphics();
//Graphics2D g2d = (Graphics2D) g;
//g2d.drawImage(fighter, (BufferedImageOp) at, getHeight(), getWidth());
g.drawImage(fighter, 0, 0, getWidth(),getHeight(), this);
g.dispose();
bs.show();
}
ゲームクラスからですあなたはコードから見ることができるようにグラフィックスgを使用しますが、私ができるように、Graphics2Dを使用する方が良いでしょうAffineTransformを使用しますか?これを実装するためにコードをどのように変更するのですか?また、画像にスケールを追加します。
画像へのリンクはこちらです: - http://prntscr.com/f89kfs
スケーリングは一般的に高価です。可能であれば、イメージを使用する前にスケーリングを行い(スケーリングされたインスタンスを使用する必要があります)、[example](http://stackoverflow.com/questions/11959758/java) jpanel-background-image/11959928#11959928)と[example](http://stackoverflow.com/questions/14115950/quality-of-image-after-resize-very-low- java/14116752#14116752)。私は[imgscalr](https://github.com/rkalla/imgscalr)を使って、本当に素晴らしい結果を得られるかもしれません。 – MadProgrammer
* "私は現在、コードから見ることができるようにGraphicsを使用しますが、Graphics2Dを使う方が良いでしょう" - 'BufferStrategy'によって返された' Graphics'インスタンスは 'Graphics2D'のインスタンスであり、それをキャストすることは安全です。それは、私が実際に必要としているのは、グラフィックスはありませんが、それは私です;) – MadProgrammer
@MadProgrammerは、単にg.drawImage(img.getScaledInstance(newWidth、-1、Image、SCALE_SMOOTH)、x、y、this); –