Re: Drawstring() and mirror printing.
mariuszpietrzak73@gmail.com writes:
I have to print mirror image of string.
The following program creates an image for 10 seconds
and then shows its mirror immage.
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 int reduce( final int intensity ){ return intensity > 127 ? 128 + 64 : 64; }
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 ]); }
@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 ){ if( java.lang.System.nanoTime() - c > 1_000_000_000L )
{ final java.awt.image.BufferedImage tmp = window; window = window1; window1 = tmp;
Main.this.repaint(); c = java.lang.System.nanoTime(); }
java.awt.EventQueue.invokeLater( this ); }
else if( java.lang.System.nanoTime() - b > 10_000_000_000L )
{ window.copyData( window1.getRaster() );
for( int y = 0; y < X[ 0 ]; ++y )for( int x = 0; x < X[ 1 ]; ++x )
{ final int color = Main.this.window1.getRGB( x, y );
Main.this.window.setRGB( X[ 1 ]- x - 1, y, color ); }
Main.this.repaint(); 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.repaint(); 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 ); }}