Hi Reinhard,

You need to seperate your image generating logic from the wicket Image Resource. I'd create a test program or unit test to build verify that the image you want is being built correctly and then bind it into wicket.

For example you can just use a BufferedDynamicImageResource with the image you generate.

Here is some code I have for writing a string into an image. If you pass backgroundColor = null it will emit a transparent background with foregroundColor text on top.

public static BufferedImage writeString(String text, int height, int width, Font font, Color backgroundColor, Color foregroundColor) { // TYPE_INT_ARGB specifies the image format: 8-bit RGBA packed
         // into integer pixels
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

         Graphics2D graphics2D = bi.createGraphics();


graphics2D.setFont(font);
         FontMetrics fontMetrics = graphics2D.getFontMetrics();
         int stringWidth = fontMetrics.stringWidth(text);
         int stringHeight = fontMetrics.getAscent();
if (backgroundColor != null) {
             graphics2D.setBackground(backgroundColor);
graphics2D.clearRect(0, 0, width, height); } graphics2D.setPaint(foregroundColor); graphics2D.drawString(text, (width - stringWidth) / 2, height / 2 + stringHeight / 4); return bi;
   }

These Wiki references that should also help you:

http://cwiki.apache.org/WICKET/how-to-create-dynamic-image-overlays.html
http://cwiki.apache.org/WICKET/how-to-stamp-an-image-template-with-context-specific-details.html

Regards,

Mike
I like to have a RenderedDynamicImageResource with a transparent background.
I tried serveral things google came up with. But none worked so far.
Let me show you what I do:

        public RenderedDynamicImageResource getCity(final Long cityId){
                RenderedDynamicImageResource image = new
RenderedDynamicImageResource(500, 570) {
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected boolean render(Graphics2D mapGraphic) {
                        return renderCity(mapGraphic, cityId);
                    }
                };

                return image;
            }


    protected boolean renderCity(Graphics2D mapGraphic, final Long cityId) {

           ....

            // Prepare g2 for transparency
          //one of the approches I tried... without luck


mapGraphic.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC,
0.9f));
            Rectangle2D.Double rect = new Rectangle2D.Double(0, 0, 500,
                    570);
            mapGraphic.fill(rect);

           .....

          // Here I draw some shapes into the mapGraphic

           ....

         //in the end I'd like to have a png with a transparent  background
and some shapes on it
    }



If anyone can provide me with help or even a working example, that would be
greatly apreciated.

cheers
reinhard



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to