Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #31417 > unrolled thread

Draw bolder(ly)?

Started byKnute Johnson <nospam@rabbitbrush.frazmtn.com>
First post2015-03-30 16:32 -0700
Last post2015-03-31 16:56 +0000
Articles 9 — 3 participants

Back to article view | Back to comp.lang.java.programmer


Contents

  Draw bolder(ly)? Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2015-03-30 16:32 -0700
    Re: Draw bolder(ly)? Jeff Higgins <jeff@invalid.invalid> - 2015-03-30 20:09 -0400
      Re: Draw bolder(ly)? Jeff Higgins <jeff@invalid.invalid> - 2015-03-30 20:46 -0400
        Re: Draw bolder(ly)? Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2015-03-30 19:08 -0700
          Re: Draw bolder(ly)? Jeff Higgins <jeff@invalid.invalid> - 2015-03-30 22:35 -0400
          Re: Draw bolder(ly)? Jeff Higgins <jeff@invalid.invalid> - 2015-03-31 09:35 -0400
            Re: Draw bolder(ly)? Jeff Higgins <jeff@invalid.invalid> - 2015-03-31 10:31 -0400
              Re: Draw bolder(ly)? Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2015-03-31 08:37 -0700
                Re: Draw bolder(ly)? Martin Gregorie <martin@address-in-sig.invalid> - 2015-03-31 16:56 +0000

#31417 — Draw bolder(ly)?

FromKnute Johnson <nospam@rabbitbrush.frazmtn.com>
Date2015-03-30 16:32 -0700
SubjectDraw bolder(ly)?
Message-ID<mfcmb4$o8j$1@dont-email.me>
Anybody know how to draw text with an already bold font, more boldly?

Thanks,

-- 

Knute Johnson

[toc] | [next] | [standalone]


#31418

FromJeff Higgins <jeff@invalid.invalid>
Date2015-03-30 20:09 -0400
Message-ID<mfcok0$vqm$1@dont-email.me>
In reply to#31417
On 03/30/2015 07:32 PM, Knute Johnson wrote:
> Anybody know how to draw text with an already bold font, more boldly?
>
You might glean some ideas here:
<http://www.java2s.com/Code/Java/2D-Graphics-GUI/Paints.htm>
Someone suggested thick outline strokes same color as text.
Someone else suggested dithering.
Shrug. Haven't experimented.

[toc] | [prev] | [next] | [standalone]


#31419

FromJeff Higgins <jeff@invalid.invalid>
Date2015-03-30 20:46 -0400
Message-ID<mfcqq9$61l$1@dont-email.me>
In reply to#31418
On 03/30/2015 08:09 PM, Jeff Higgins wrote:

> You might glean some ideas here:
Please do not go to the web site I just linked.
There is something really fucked up there.

[toc] | [prev] | [next] | [standalone]


#31420

FromKnute Johnson <nospam@rabbitbrush.frazmtn.com>
Date2015-03-30 19:08 -0700
Message-ID<mfcvg0$8n0$1@dont-email.me>
In reply to#31419
On 3/30/2015 5:46 PM, Jeff Higgins wrote:
> On 03/30/2015 08:09 PM, Jeff Higgins wrote:
>
>> You might glean some ideas here:
> Please do not go to the web site I just linked.
> There is something really fucked up there.

OK, I won't.  I did try changing the stroke but I'm not sure that works 
when drawing characters but maybe I don't know what I'm doing.

Thanks for looking.

-- 

Knute Johnson

[toc] | [prev] | [next] | [standalone]


#31422

FromJeff Higgins <jeff@invalid.invalid>
Date2015-03-30 22:35 -0400
Message-ID<mfd163$jro$1@dont-email.me>
In reply to#31420
On 03/30/2015 10:08 PM, Knute Johnson wrote:
> On 3/30/2015 5:46 PM, Jeff Higgins wrote:
>> On 03/30/2015 08:09 PM, Jeff Higgins wrote:
>>
>>> You might glean some ideas here:
>> Please do not go to the web site I just linked.
>> There is something really fucked up there.
>
> OK, I won't.  I did try changing the stroke but I'm not sure that works
> when drawing characters but maybe I don't know what I'm doing.
>
> Thanks for looking.
>
Sorry for pointing to a seriously broken page
(I hope not intentionally broken)

I did just try dithering a text in Swing - butt ugly.

Anyway from that page

/*
  * Copyright (c) 2000 David Flanagan.  All rights reserved.
  * This code is from the book Java Examples in a Nutshell, 2nd Edition.
  * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.
  * You may study, use, and modify it for any non-commercial purpose.
  * You may distribute it non-commercially as long as you retain this 
notice.
  * For a commercial use license, or to purchase the book (recommended),
  * visit http://www.davidflanagan.com/javaexamples2.
  */

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.TexturePaint;
import java.awt.font.GlyphVector;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;

/** A demonstration of Java2D transformations */
public class Paints extends JPanel {
   static final int WIDTH = 800, HEIGHT = 375; // Size of our example

   public String getName() {
     return "Paints";
   }

   public int getWidth() {
     return WIDTH;
   }

   public int getHeight() {
     return HEIGHT;
   }

   /** Draw the example */
   public void paint(Graphics g1) {
     Graphics2D g = (Graphics2D) g1;
     // Paint the entire background using a GradientPaint.
     // The background color varies diagonally from deep red to pale blue
     g.setPaint(new GradientPaint(0, 0, new Color(150, 0, 0), WIDTH, HEIGHT,
         new Color(200, 200, 255)));
     g.fillRect(0, 0, WIDTH, HEIGHT); // fill the background

     // Use a different GradientPaint to draw a box.
     // This one alternates between deep opaque green and transparent green.
     // Note: the 4th arg to Color() constructor specifies color opacity
     g.setPaint(new GradientPaint(0, 0, new Color(0, 150, 0), 20, 20,
         new Color(0, 150, 0, 0), true));
     g.setStroke(new BasicStroke(15)); // use wide lines
     g.drawRect(25, 25, WIDTH - 50, HEIGHT - 50); // draw the box

     // The glyphs of fonts can be used as Shape objects, which enables
     // us to use Java2D techniques with letters Just as we would with
     // any other shape. Here we get some letter shapes to draw.
     Font font = new Font("Serif", Font.BOLD, 10); // a basic font
     Font bigfont = // a scaled up version
     font.deriveFont(AffineTransform.getScaleInstance(30.0, 30.0));
     GlyphVector gv = bigfont.createGlyphVector(g.getFontRenderContext(),
         "JAV");
     Shape jshape = gv.getGlyphOutline(0); // Shape of letter J
     Shape ashape = gv.getGlyphOutline(1); // Shape of letter A
     Shape vshape = gv.getGlyphOutline(2); // Shape of letter V

     // We're going to outline the letters with a 5-pixel wide line
     g.setStroke(new BasicStroke(5.0f));

     // We're going to fake shadows for the letters using the
     // following Paint and AffineTransform objects
     Paint shadowPaint = new Color(0, 0, 0, 100); // Translucent black
     AffineTransform shadowTransform = AffineTransform.getShearInstance(
         -1.0, 0.0); // Shear to the right
     shadowTransform.scale(1.0, 0.5); // Scale height by 1/2

     // Move to the baseline of our first letter
     g.translate(65, 270);

     // Draw the shadow of the J shape
     g.setPaint(shadowPaint);
     g.translate(15, 20); // Compensate for the descender of the J
     // transform the J into the shape of its shadow, and fill it
     g.fill(shadowTransform.createTransformedShape(jshape));
     g.translate(-15, -20); // Undo the translation above

     // Now fill the J shape with a solid (and opaque) color
     g.setPaint(Color.blue); // Fill with solid, opaque blue
     g.fill(jshape); // Fill the shape
     g.setPaint(Color.black); // Switch to solid black
     g.draw(jshape); // And draw the outline of the J

     // Now draw the A shadow
     g.translate(75, 0); // Move to the right
     g.setPaint(shadowPaint); // Set shadow color
     g.fill(shadowTransform.createTransformedShape(ashape)); // draw shadow

     // Draw the A shape using a solid transparent color
     g.setPaint(new Color(0, 255, 0, 125)); // Transparent green as paint
     g.fill(ashape); // Fill the shape
     g.setPaint(Color.black); // Switch to solid back
     g.draw(ashape); // Draw the outline

     // Move to the right and draw the shadow of the letter V
     g.translate(175, 0);
     g.setPaint(shadowPaint);
     g.fill(shadowTransform.createTransformedShape(vshape));

     // We're going to fill the next letter using a TexturePaint, which
     // repeatedly tiles an image. The first step is to obtain the image.
     // We could load it from an image file, but here we create it
     // ourselves by drawing a into an off-screen image. Note that we use
     // a GradientPaint to fill the off-screen image, so the fill pattern
     // combines features of both Paint classes.
     BufferedImage tile = // Create an image
     new BufferedImage(50, 50, BufferedImage.TYPE_INT_RGB);
     Graphics2D tg = tile.createGraphics(); // Get its Graphics for drawing
     tg.setColor(Color.pink);
     tg.fillRect(0, 0, 50, 50); // Fill tile background with pink
     tg.setPaint(new GradientPaint(40, 0, Color.green, // diagonal gradient
         0, 40, Color.gray)); // green to gray
     tg.fillOval(5, 5, 40, 40); // Draw a circle with this gradient

     // Use this new tile to create a TexturePaint and fill the letter V
     g.setPaint(new TexturePaint(tile, new Rectangle(0, 0, 50, 50)));
     g.fill(vshape); // Fill letter shape
     g.setPaint(Color.black); // Switch to solid black
     g.draw(vshape); // Draw outline of letter

     // Move to the right and draw the shadow of the final A
     g.translate(160, 0);
     g.setPaint(shadowPaint);
     g.fill(shadowTransform.createTransformedShape(ashape));


     g.fill(ashape); // Fill letter A
     g.setPaint(Color.black); // Revert to solid black
     g.draw(ashape); // Draw the outline of the A
   }
   public static void main(String[] a) {
     JFrame f = new JFrame();
     f.addWindowListener(new WindowAdapter() {
       public void windowClosing(WindowEvent e) {
         System.exit(0);
       }
     });
     f.setContentPane(new Paints());
     f.setSize(800,375);
     f.setVisible(true);
   }
}

[toc] | [prev] | [next] | [standalone]


#31424

FromJeff Higgins <jeff@invalid.invalid>
Date2015-03-31 09:35 -0400
Message-ID<mfe7rr$aam$1@dont-email.me>
In reply to#31420
On 03/30/2015 10:08 PM, Knute Johnson wrote:
> On 3/30/2015 5:46 PM, Jeff Higgins wrote:
>> On 03/30/2015 08:09 PM, Jeff Higgins wrote:
>>
>>> You might glean some ideas here:
>> Please do not go to the web site I just linked.
>> There is something really fucked up there.
>
> OK, I won't.  I did try changing the stroke but I'm not sure that works
> when drawing characters but maybe I don't know what I'm doing.
>
package scratch;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.font.GlyphVector;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Scratch extends JPanel {
   private static final int h = 100, w = 300;
   private static final String text = "JAVA";

   public void paint(Graphics g1) {
     Graphics2D g = (Graphics2D) g1;
     g.setPaint(new Color(255, 255, 255));
     g.fillRect(0, 0, w, h);
     g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
         RenderingHints.VALUE_ANTIALIAS_ON);
     g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
         RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
     Font font = new Font(Font.SANS_SERIF, Font.BOLD, 24);
     GlyphVector gv = font.createGlyphVector(g.getFontRenderContext(), 
text);
     Shape vector = gv.getOutline();
     g.setStroke(new BasicStroke(2.0f));
     g.setPaint(new Color(0, 0, 0));
     g.setFont(font);

     g.drawString(text, 10, 30);

     g.translate(90, 30);
     g.fill(vector);

     g.translate(80, 0);
     g.fill(vector);
     g.draw(vector);
   }

   public static void main(String[] a) {
     javax.swing.SwingUtilities.invokeLater(new Runnable() {
       public void run() {
         JFrame f = new JFrame();
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         f.setContentPane(new Scratch());
         f.setSize(w, h);
         f.setVisible(true);
       }
     });
   }
}

[toc] | [prev] | [next] | [standalone]


#31425

FromJeff Higgins <jeff@invalid.invalid>
Date2015-03-31 10:31 -0400
Message-ID<mfeb53$npm$1@dont-email.me>
In reply to#31424
On 03/31/2015 09:35 AM, Jeff Higgins wrote:
package scratch;

update

package scratch;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.font.GlyphVector;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Scratch extends JPanel {
   private static final long serialVersionUID = 1L;
   private static final int h = 100, w = 360;
   private static final String text = "JAVA";

   public void paintComponent(Graphics g1) {
     super.paintComponent(g1);
     Graphics2D g = (Graphics2D)g1.create();
     g.setPaint(new Color(255, 255, 255));
     g.fillRect(0, 0, w, h);
     RenderingHints rh =
         new RenderingHints(
                 RenderingHints.KEY_ANTIALIASING,
                 RenderingHints.VALUE_ANTIALIAS_ON);
     rh.put(
         RenderingHints.KEY_RENDERING,
         RenderingHints.VALUE_RENDER_QUALITY);
     rh.put(
         RenderingHints.KEY_TEXT_ANTIALIASING,
         RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
     g.setRenderingHints(rh);
     Font font = new Font(Font.SANS_SERIF, Font.BOLD, 24);
     GlyphVector gv =
         font.createGlyphVector(g.getFontRenderContext(), text);
     Shape vector = gv.getOutline();
     g.setStroke(new BasicStroke(2.0f));
     g.setPaint(new Color(0, 0, 0));
     g.setFont(font);

     g.drawString(text, 10, 30);

     g.translate(90, 30);
     g.fill(vector);

     g.translate(80, 0);
     g.fill(vector);
     g.draw(vector);

     g.translate(80, 0);
     g.drawString(text, 0, 0);
     g.drawString(text, -1, 0);
     g.drawString(text, 1, 0);
     g.drawString(text, 0, -1);
     g.drawString(text, 0, 1);
   }

   public static void main(String[] a) {
     javax.swing.SwingUtilities.invokeLater(new Runnable() {
       public void run() {
         JFrame f = new JFrame();
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         f.add(new Scratch());
         f.setSize(w, h);
         f.setVisible(true);
       }
     });
   }
}

[toc] | [prev] | [next] | [standalone]


#31426

FromKnute Johnson <nospam@rabbitbrush.frazmtn.com>
Date2015-03-31 08:37 -0700
Message-ID<mfeesl$5gc$1@dont-email.me>
In reply to#31425
On 3/31/2015 7:31 AM, Jeff Higgins wrote:
> On 03/31/2015 09:35 AM, Jeff Higgins wrote:
> package scratch;
>
> update

Thanks for that Jeff, that is really neat!

And thank you Stefan for your suggestions too.

-- 

Knute Johnson

[toc] | [prev] | [next] | [standalone]


#31429

FromMartin Gregorie <martin@address-in-sig.invalid>
Date2015-03-31 16:56 +0000
Message-ID<mfejje$nh0$1@dont-email.me>
In reply to#31426
On Tue, 31 Mar 2015 08:37:09 -0700, Knute Johnson wrote:

> On 3/31/2015 7:31 AM, Jeff Higgins wrote:
>> On 03/31/2015 09:35 AM, Jeff Higgins wrote:
>> package scratch;
>>
>> update
> 
> Thanks for that Jeff, that is really neat!
> 
> And thank you Stefan for your suggestions too.

Thanks to all of you: that looks very much as if you've answered a 
question I was about to ask.


-- 
martin@   | Martin Gregorie
gregorie. | Essex, UK
org       |

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.java.programmer


csiph-web