Class HeadlessRenderContext

  • All Implemented Interfaces:
    javax.swing.SwingConstants, SequenceRenderContext

    public class HeadlessRenderContext
    extends java.lang.Object
    implements SequenceRenderContext

    A stand-alone SequenceRenderContext to make it easy to render to an image.

    This class makes it very easy to render sequence information into an arbitrary graphics object without the need to fuss about with AWT or Swing components. You chose the width of the image and the region of the sequence to render. It will calculate the scale factor to ensure that the whole region of the sequence fits into that width. You can then use the context to render any number of SequenceRenderer instances to any Graphics2D instance you want, for example, to an image that's to be written out by a servlet.

    Example

     HeadlessRenderContext ctxt = new HeadlessRenderContext(
       seq,   // the sequence to render
       range, // a RangeLocation giving the block you want to render
       width  // an int specifying the image width in pixles
     );
    
     BufferedImage img = new BufferedImage(
       width,                                   // image width
       (int) Math.ceil(seqRend.getDepth(ctxt),  // calculated height
       BufferedImage.TYPE_INT_RGB               // let's use RGB
     );
    
     // set stuff up
     Graphics2D graph = img.createGraphics();
     graph.setPaint(Color.WHITE);
     graph.fillRect(0, 0, img.getWidth(), img.getHeight());
    
     // and now render the sequences
     sequenceRenderer.paint(graph, ctxt);
    
     // let's dump this out as a png
     ImageIO.write(image, "png", myFile);
     
    Since:
    1.3
    Author:
    Matthew Pocock
    • Constructor Detail

      • HeadlessRenderContext

        public HeadlessRenderContext​(Sequence seq,
                                     RangeLocation range,
                                     int width)
    • Method Detail

      • getDirection

        public int getDirection()
        Description copied from interface: SequenceRenderContext
        Gets the direction in which this context expects sequences to be rendered - HORIZONTAL or VERTICAL.
        Specified by:
        getDirection in interface SequenceRenderContext
        Returns:
        The Direction value
      • sequenceToGraphics

        public double sequenceToGraphics​(int i)
        Description copied from interface: SequenceRenderContext
        Converts a sequence index into a graphical coordinate. You will need to use this in conjunction with getDirection to correctly lay graphics out.
        Specified by:
        sequenceToGraphics in interface SequenceRenderContext
        Parameters:
        i - Index within the sequence
        Returns:
        Equivalent graphical position in pixels
      • graphicsToSequence

        public int graphicsToSequence​(java.awt.geom.Point2D point)
        Description copied from interface: SequenceRenderContext
        Converts a graphical position into a sequence coordinate. This will use getDirection to decide whether to use the x or y coordinate.
        Specified by:
        graphicsToSequence in interface SequenceRenderContext
        Parameters:
        point - a point representing the position
        Returns:
        the corresponding sequence index
      • graphicsToSequence

        public int graphicsToSequence​(double d)
        Description copied from interface: SequenceRenderContext
        Converts a graphical position into a sequence coordinate. You will need to have used getDirection to decide whether to use the x or y coordinate.
        Specified by:
        graphicsToSequence in interface SequenceRenderContext
        Parameters:
        d - A pixel position
        Returns:
        The corresponding sequence index