Attualmente sto tentando di disegnare immagini sullo schermo ad una velocità normale come in un videogioco.Disegno di un'immagine utilizzando la precisione del livello sub-pixel utilizzando Graphics2D
Sfortunatamente, a causa della velocità con cui l'immagine si sta muovendo, alcuni fotogrammi sono identici perché l'immagine non ha ancora spostato un pixel intero.
C'è un modo per fornire i valori float
a Graphics2D per la posizione sullo schermo per disegnare l'immagine, piuttosto che i valori int
?
Inizialmente qui è quello che avevo fatto:
BufferedImage srcImage = sprite.getImage ();
Position imagePosition = ... ; //Defined elsewhere
g.drawImage (srcImage, (int) imagePosition.getX(), (int) imagePosition.getY());
Questa di soglie corso, in modo da l'immagine non si muove tra i pixel, ma salta da uno all'altro.
Il metodo successivo era impostare il colore della vernice su una texture e disegnare in una posizione specificata. Sfortunatamente, questo ha prodotto risultati errati che mostravano piastrellature piuttosto che correggere l'antialiasing.
g.setRenderingHint (RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
BufferedImage srcImage = sprite.getImage ();
g.setPaint (new TexturePaint (srcImage, new Rectangle2D.Float (0, 0, srcImage.getWidth (), srcImage.getHeight ())));
AffineTransform xform = new AffineTransform ();
xform.setToIdentity ();
xform.translate (onScreenPos.getX (), onScreenPos.getY ());
g.transform (xform);
g.fillRect(0, 0, srcImage.getWidth(), srcImage.getHeight());
Cosa devo fare per ottenere l'effetto desiderato del rendering subpixel di un'immagine in Java?
Hey Lawren! Grazie per aver risposto. Grazie mille per avermi mostrato come farlo! –
perché t.scale (1, 1); ?? AFAIK che l'istruzione non fa nulla? (scala alla sua dimensione effettiva?) – pakore