KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am currently attempting to draw images on the screen at a regular rate like in a video game. Unfortunately, because of the rate at which the image is moving, some frames are identical because the image has not yet moved a full pixel. Is there a way to provide float values to Graphics2D for on-screen position to draw the image, rather than int values? Initially here is what I had done: BufferedImage srcImage = sprite.getImage ( ); Position imagePosition = ... ; //Defined elsewhere g.drawImage ( srcImage, (int) imagePosition.getX(), (int) imagePosition.getY() ); This of course thresholds, so the picture doesn't move between pixels, but skips from one to the next. The next method was to set the paint color to a texture instead and draw at a specified position. Unfortunately, this produced incorrect results that showed tiling rather than correct 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()); What should I do to achieve the desired effect of subpixel rendering of an Image in Java?
Tags (comma-separated)
Save Edits
Cancel