java - image rotation method leaves something in the ram -
i working on game , more diversity of graphics want call rotate(bufferedimage imgold, int deg) method few hundred times rotate graphics (eg. tree stumps).
with unrotated graphics never had issues memory. started use rotator error occurred if didn't reduce amount of rotated images drastically (like 95% drastically).
the error occurred inside of rotate(bufferedimage imgold, int deg) method , since started rotate massive amounts of images suppose there must leftovers inside memory rotate(bufferedimage imgold, int deg) method don't know how deal with.
here see code of class rotator:
package movement; import java.awt.graphics2d; import java.awt.geom.affinetransform; import java.awt.image.bufferedimage; public class rotator { public static bufferedimage rotate(bufferedimage imgold, int deg){ //parameters method image rotate , rate of rotation in degrees affinetransform @ = affinetransform.getrotateinstance(math.toradians(deg), (int)(imgold.getwidth()/2), (int)(imgold.getheight()/2)); //setting transform bufferedimage imgnew = new bufferedimage(imgold.getwidth(), imgold.getheight(), imgold.gettype()); //creating new image same properties of old 1 graphics2d g = (graphics2d) imgnew.getgraphics(); //create graphics g.settransform(at); //applying transform g.drawimage(imgold, 0, 0, null); //painting rotated image return imgnew; //return rotated image } }
i hope has idea , didn't make mistakes (its first question posted here).
your biggest problem simple- you're duplicating every image you're every time rotate. can try draw rotated image onto itself, removing need churn through massive amount of objects garbage collector.
also, if dead-set on making new objects, make sure flush (bufferedimage#flush
) old images , dipose (graphics2d#dispose
) graphics objects.
Comments
Post a Comment