java - How to resize BufferedImage but conserve it's Graphics? -
i have own custom command maintains backing image it's content. buffer of type bufferedimage
.
attention! usage of backing image due requirements. don't teach me draw within paintcomponent()
currently resizing image in next way:
@override public void setbounds(int x, int y, int width, int height) { if( bufferedimage == null ) { bufferedimage = new bufferedimage(width, height, bufferedimage.type_int_argb); } else { if( bufferedimage.getwidth() < width || bufferedimage.getheight() < height ) { bufferedimage newimage = new bufferedimage(width, height, bufferedimage.type_int_argb); newimage.creategraphics().drawimage(bufferedimage, 0, 0, null); bufferedimage = newimage; } } super.setbounds(x, y, width, height); }
unfortunately, requires create new bufferedimage
object , hence makes obtained graphics
object invalid.
so have have own method
public graphics2d createimagegraphics() { if( bufferedimage != null ) { homecoming bufferedimage.creategraphics(); } else { homecoming null; } }
although override getgraphics()
.
is possible resize image conserve graphics object?
here little illustration of how perform custom painting in swing:
import java.awt.borderlayout; import java.awt.color; import java.awt.dimension; import java.awt.graphics; import java.awt.event.actionevent; import javax.swing.abstractaction; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.swingutilities; public class jframetest { private boolean drawoval = false; protected void initui() { final jpanel panel = new jpanel() { @override protected void paintcomponent(graphics g) { super.paintcomponent(g); if (drawoval) { g.setcolor(color.blue); g.drawoval(0, 0, 100, 100); } } @override public dimension getpreferredsize() { homecoming new dimension(100, 100); } }; abstractaction drawaction = new abstractaction("draw") { @override public void actionperformed(actionevent e) { drawoval = true; panel.repaint(); } }; jbutton drawbutton = new jbutton(drawaction); jpanel buttonpanel = new jpanel(); buttonpanel.add(drawbutton); jframe frame = new jframe(); frame.add(panel, borderlayout.center); frame.add(buttonpanel, borderlayout.south); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.pack(); frame.setvisible(true); } public static void main(string[] args) { swingutilities.invokelater(new runnable() { @override public void run() { new jframetest().initui(); } }); } }
java swing graphics awt
No comments:
Post a Comment