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


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

Drawstring() and mirror printing.

Started bymariuszpietrzak73@gmail.com
First post2014-02-01 14:34 -0800
Last post2014-02-03 09:16 -0800
Articles 5 — 4 participants

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


Contents

  Drawstring() and mirror printing. mariuszpietrzak73@gmail.com - 2014-02-01 14:34 -0800
    Re: Drawstring() and mirror printing. "John B. Matthews" <nospam@nospam.invalid> - 2014-02-01 20:19 -0500
    Re: Drawstring() and mirror printing. Silvio <silvio@internet.com> - 2014-02-02 23:14 +0100
    Re: Drawstring() and mirror printing. mariuszpietrzak73@gmail.com - 2014-02-03 07:49 -0800
      Re: Drawstring() and mirror printing. Roedy Green <see_website@mindprod.com.invalid> - 2014-02-03 09:16 -0800

#27435 — Drawstring() and mirror printing.

Frommariuszpietrzak73@gmail.com
Date2014-02-01 14:34 -0800
SubjectDrawstring() and mirror printing.
Message-ID<da2c2292-8afa-4993-af35-49fa23a58e12@googlegroups.com>
Hi.
Please help me to reslove issue. I have to print mirror image of string. I tryed to use AffineTransform and scale but it didnt work well. Mabe have you any idea to do this 

[toc] | [next] | [standalone]


#27437

From"John B. Matthews" <nospam@nospam.invalid>
Date2014-02-01 20:19 -0500
Message-ID<lck6et$o6s$1@dont-email.me>
In reply to#27435
On 2/1/14, 5:34 PM, mariuszpietrzak73@gmail.com wrote:
>
> Please help me to [resolve] issue. I have to print mirror image of string. I [tried] to use AffineTransform and scale. but it didn't work well. Maybe have you any idea to do this?
>

As an alternative to Stefan Ram delightful example, you can alter the 
graphics context's transform to invert through the desired axis. The 
example below uses scale(1, -1) to create a vertical reflection:

     private static class MirrorPanel extends JPanel {

         private static final int SZ = 42;
         private static final String s = "Hello";

         @Override
         protected void paintComponent(Graphics g) {
             super.paintComponent(g);
             Graphics2D g2d = (Graphics2D) g;
             g2d.setFont(getFont().deriveFont(42f));
             g2d.drawString(s, SZ, SZ);
             g2d.drawLine(SZ, SZ,
                 SZ + g2d.getFontMetrics().stringWidth(s), SZ);
             g2d.scale(1, -1);
             g2d.drawString(s, SZ, -SZ);
         }

         @Override
         public Dimension getPreferredSize() {
             return new Dimension(SZ * 5, SZ * 2);
         }
     }

See also this related example due to Daniele Futtorovic:

<http://groups.google.com/group/comp.lang.java.help/browse_frm/thread/2d6db5d6d6739b22>

-- 
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>

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


#27440

FromSilvio <silvio@internet.com>
Date2014-02-02 23:14 +0100
Message-ID<52eec338$0$2899$e4fe514c@news2.news.xs4all.nl>
In reply to#27435
On 02/02/2014 02:25 AM, Stefan Ram wrote:
> mariuszpietrzak73@gmail.com writes:
>> I tryed to use AffineTransform
>
>    The next program is similar to the one I posted before, but
>    uses AffineTransform. The mirror animation now transforms
>    smoothly between the original image and the mirror image.
>
> class Main extends javax.swing.JComponent implements java.lang.Runnable
> { final int[] X ={ 800, 800 };
>    private static final long serialVersionUID = 0L;
>    java.awt.image.BufferedImage window
>    = new java.awt.image.BufferedImage
>    ( X[ 1 ], X[ 0 ], java.awt.image.BufferedImage.TYPE_INT_RGB );
>    java.awt.image.BufferedImage window1
>    = new java.awt.image.BufferedImage
>    ( X[ 1 ], X[ 0 ], java.awt.image.BufferedImage.TYPE_INT_RGB );
>    public static void main( final java.lang.String args[] )
>    { java.awt.EventQueue.invokeLater( new Main() ); }
>    public static int get( final int color, final int shift )
>    { return (( color &( 0x000000FF << shift ))>> shift ); }
>    public static int B( final int color ){ return get( color, 0 ); }
>    public static int G( final int color ){ return get( color, 8 ); }
>    public static int R( final int color ){ return get( color, 16 ); }
>    public static void limit( final double[] a, final int i, final int max )
>    { if( a[ i ]< 0 ){ a[ i ]= 0; return; }else
>      if( a[ i ]> max ){ a[ i ]= max; return; }}
>    public static int color( final int r, final int g, final int b )
>    { return ( r << 16 )|( g << 8 )| b; }
>    public static int color( final double[] C )
>    { return color( ( int )C[ 0 ],( int )C[ 1 ],( int )C[ 2 ]); }
>    long l0 = -1L;
>    @java.lang.Override public final void run()
>    { final javax.swing.JFrame frame = new javax.swing.JFrame( this.getClass().getName() );
>      Main.this.setPreferredSize( new java.awt.Dimension( X[ 1 ], X[ 0 ]));
>      frame.setDefaultCloseOperation( javax.swing.JFrame.EXIT_ON_CLOSE );
>      frame.add( Main.this ); frame.pack(); frame.setVisible( true );
>      final java.lang.Runnable loop = new java.lang.Runnable()
>      { double[] x ={ X[ 0 ]/2, X[ 1 ]/2 }; double[] C ={ 127, 127, 127 };
>        long t = 0; long b = 0; long c = 0;
>        public void run(){ if( b == 0L )b = java.lang.System.nanoTime();
>          if( b == -1L )
>          { final long l = java.lang.System.nanoTime();
>            while( java.lang.System.nanoTime() - l < 100_000_000L )
>            { final long l1 = java.lang.System.nanoTime(); if( l0 < 0 )l0 = l;
>              final double k = 0.5 - java.lang.Math.cos
>              ( ( l1 - l0 )/ 1E9 %( 2 * java.lang.Math.PI )) / 2;
>              final java.awt.Graphics2D g =( java.awt.Graphics2D )Main.this.window.getGraphics();
>              g.clearRect( 0, 0, X[ 1 ], X[ 0 ]);
>              g.setTransform( new java.awt.geom.AffineTransform( 1 - 2 * k, 0, 0, 1, k * X[ 1 ], 0 ));
>              g.drawImage( Main.this.window1, 0, 0, null );
>              Main.this.paintImmediately( 0, 0, java.lang.Integer.MAX_VALUE, java.lang.Integer.MAX_VALUE ); }
>            java.awt.EventQueue.invokeLater( this ); }
>          else if( java.lang.System.nanoTime() - b > 10_000_000_000L )
>          { window.copyData( window1.getRaster() );
>            Main.this.window.createGraphics();
>            b = -1; c = java.lang.System.nanoTime(); java.awt.EventQueue.invokeLater( this ); }
>          else { for( int i = 0; i < 100_000; ++i )
>            { for( int j = 0; j < 2; ++j ){ x[ j ]+=( java.lang.Math.random() - 0.5 ); limit( x, j, X[ j ] - 1 ); }
>              for( int j = 0; j < 3; ++j ){ C[ j ]+=( java.lang.Math.random() - 0.5 ); limit( C, j, 255 ); }
>              Main.this.window.setRGB(( int )x[ 1 ],( int )x[ 0 ], color( C )); }
>            final long l = java.lang.System.nanoTime();
>            if( l - t > 100_000L )
>            { Main.this.paintImmediately
>              ( 0, 0, java.lang.Integer.MAX_VALUE, java.lang.Integer.MAX_VALUE ); t = l; }
>            java.awt.EventQueue.invokeLater( this ); }}}; loop.run(); }
>    @java.lang.Override public void paintComponent( final java.awt.Graphics graphics )
>    { graphics.drawImage( Main.this.window, 0, 0, null ); }}
>

Stefan,

Would you be so kind to pull code in your posts through some code 
formatting utility? You may choose to use this horrible layout and may 
even have gotten so used to it that you find it legible but for the 
casual followers of threads on this NG it is really painful.

I for one habitually skip all code in your posts because it takes me at 
least twice the effort to read as the average snippet.

Silvio

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


#27451

Frommariuszpietrzak73@gmail.com
Date2014-02-03 07:49 -0800
Message-ID<5d268742-66fa-4ccd-90e2-55352074081d@googlegroups.com>
In reply to#27435
W dniu sobota, 1 lutego 2014 23:34:37 UTC+1 użytkownik mariuszp...@gmail.com napisał:
> Hi.
> 
> Please help me to reslove issue. I have to print mirror image of string. I tryed to use AffineTransform and scale but it didnt work well. Mabe have you any idea to do this

Thank you very much for help. The simple solution but so much time I spent to understand it. Yor solution is really working.

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


#27452

FromRoedy Green <see_website@mindprod.com.invalid>
Date2014-02-03 09:16 -0800
Message-ID<tmjve9p5uf3o867473in81svqifcbs3u89@4ax.com>
In reply to#27451
On Mon, 3 Feb 2014 07:49:25 -0800 (PST), mariuszpietrzak73@gmail.com
wrote, quoted or indirectly quoted someone who said :

>I tryed to use AffineTransform and scale but it didnt work well. Mabe have =
>you any idea to do this

Now you see how it is done, can you give any hints why you went off
the rails?
-- 
Roedy Green Canadian Mind Products http://mindprod.com
Because a thing seems difficult for you, do not think it 
impossible for anyone to accomplish.
~ Marcus Aurelius 121-04-26 180-03-17 

[toc] | [prev] | [standalone]


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


csiph-web