2017-05-15 18 views
-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

+0

スケーリングは一般的に高価です。可能であれば、イメージを使用する前にスケーリングを行い(スケーリングされたインスタンスを使用する必要があります)、[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

+0

* "私は現在、コードから見ることができるようにGraphicsを使用しますが、Graphics2Dを使う方が良いでしょう" - 'BufferStrategy'によって返された' Graphics'インスタンスは 'Graphics2D'のインスタンスであり、それをキャストすることは安全です。それは、私が実際に必要としているのは、グラフィックスはありませんが、それは私です;) – MadProgrammer

+0

@MadProgrammerは、単にg.drawImage(img.getScaledInstance(newWidth、-1、Image、SCALE_SMOOTH)、x、y、this); –

答えて

0

問題を解決するには、AffineTransformを使用していた: -

public void paintComponent(BufferStrategy bs){ 

    if(bs == null){ 
     createBufferStrategy(3); 
     return; 
    } 


    AffineTransform at = AffineTransform.getTranslateInstance(250, 250); 
    at.scale(0.15, 0.15); 
    Graphics2D g2d = (Graphics2D) bs.getDrawGraphics(); 
    g2d.drawImage(this.fighter, at, this); 

    g2d.dispose(); 
    bs.show(); 
    //repaint(); 
} 

それは、画像を拡大縮小しても、あなたが望む場所にそれを置きます。

関連する問題