Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Ascii font pattern

/**  *   * @author Aniruddha Dutta Chowdhury  * a.d.chowdhury at gmail.com  * If provided any string this program will give this type of  * ouput  *  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@    @@@@@    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@    @@@@@    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@    @@@@@    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@    @@@@@    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@    @    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@    @@@@@    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@    @    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@    @@@@@    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@     @     @@@@@@@@@@    @@     @@@@@@@@    @@@@@    @     @@@@@    @@@@@@    @@@@@@@@@     @@    @@@@@@@@@     @@    @@@@@    @@     @@@@@@@@@@@@       @@@@@@@ @@@@@@@    @@@    @@@@@@@@@@    @        @@@@@@    @@@@@         @@@@@@    @@@@@@    @@@@@@@        @    @@@@@@@        @    @@@@@    @        @@@@@@@@           @@@@@ @@@@@@@    @@@    @@@@@@@@@@             @@@@@@    @@@@@         @@@@@@    @@@@@@    @@@@@@              @@@@@@              @@@@@             @@@@@@@@            @@@@ @@@@@@     @@@     @@@@@@@@@      @@@     @@@@@    @@@@@     @@@@@@@@@@    @@@@@@    @@@@@@     @@@      @@@@@@     @@@      @@@@@      @@@     @@@@@@    @@@@     @@@@ @@@@@@    @@@@@    @@@@@@@@@     @@@@@    @@@@@    @@@@@     @@@@@@@@@@    @@@@@@    @@@@@     @@@@@     @@@@@     @@@@@     @@@@@     @@@@@    @@@@@@@  @@@@@@    @@@@ @@@@@@    @@@@@    @@@@@@@@@    @@@@@@    @@@@@    @@@@@    @@@@@@@@@@@    @@@@@@    @@@@@    @@@@@@@    @@@@@    @@@@@@@    @@@@@    @@@@@@    @@@@@@@@@@@@@@@    @@@@ @@@@@     @@@@@@    @@@@@@@@    @@@@@@    @@@@@    @@@@@    @@@@@@@@@@@    @@@@@@    @@@@@    @@@@@@@    @@@@@    @@@@@@@    @@@@@    @@@@@@    @@@@@@@@@@@@@      @@@@ @@@@@               @@@@@@@@    @@@@@@    @@@@@    @@@@@    @@@@@@@@@@@    @@@@@@    @@@@@    @@@@@@@    @@@@@    @@@@@@@    @@@@@    @@@@@@    @@@@@@@@@          @@@@ @@@@@               @@@@@@@@    @@@@@@    @@@@@    @@@@@    @@@@@@@@@@@    @@@@@@    @@@@@    @@@@@@@    @@@@@    @@@@@@@    @@@@@    @@@@@@    @@@@@@             @@@@ @@@@                 @@@@@@@    @@@@@@    @@@@@    @@@@@    @@@@@@@@@@@    @@@@@@    @@@@@    @@@@@@@    @@@@@    @@@@@@@    @@@@@    @@@@@@    @@@@@@      @@@    @@@@ @@@@                 @@@@@@@    @@@@@@    @@@@@    @@@@@    @@@@@@@@@@@    @@@@@@    @@@@@    @@@@@@@    @@@@@    @@@@@@@    @@@@@    @@@@@@    @@@@@    @@@@@@    @@@@ @@@@    @@@@@@@@@    @@@@@@@    @@@@@@    @@@@@    @@@@@    @@@@@@@@@@@    @@@@@     @@@@@@    @@@@@     @@@@@@    @@@@@     @@@@@    @@@@@@    @@@@@    @@@@@@    @@@@ @@@    @@@@@@@@@@@    @@@@@@    @@@@@@    @@@@@    @@@@@    @@@@@@@@@@@     @@@      @@@@@@     @@@      @@@@@@     @@@      @@@@@    @@@@@@    @@@@@     @@@@     @@@@ @@@    @@@@@@@@@@@    @@@@@@    @@@@@@    @@@@@    @@@@@    @@@@@@@@@@@@             @@@@@@@             @@@@@@@             @@@@@    @@@@@@    @@@@@              @@@@ @@@    @@@@@@@@@@@    @@@@@@    @@@@@@    @@@@@    @@@@@    @@@@@@@@@@@@        @    @@@@@@@        @    @@@@@@@        @    @@@@@    @@@@@@    @@@@@@         @   @@@@ @@    @@@@@@@@@@@@@    @@@@@    @@@@@@    @@@@@    @@@@@    @@@@@@@@@@@@@@     @@    @@@@@@@@@     @@    @@@@@@@@@     @@    @@@@@    @@@@@@    @@@@@@@@     @@@    @@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  */ import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.awt.image.PixelGrabber; import java.util.ArrayList; import java.util.List; public class FontAlgo {   private static final char    CHAR_TO_PATTERN  = '@';   private static final int    WIDTH      = 50;   private static final int    HEIGHT      = 50;   private static final boolean  isReverse    = true;   private static final Font    appliedFont    = new Font("Couirer new", Font.BOLD, 30);   private static TextualChar getTextualChar(char a_char) throws Throwable {     BufferedImage bImg = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);     Graphics g = bImg.getGraphics();     g.setColor(Color.green);     g.fillRect(0, 0, WIDTH, HEIGHT);     g.setFont(appliedFont);     g.setColor(Color.black);     g.drawString(new String(new char[] { a_char }), 10, g.getFontMetrics().getHeight());     PixelGrabber p = new PixelGrabber(bImg, 0, 0, WIDTH, HEIGHT, true);     if (p.grabPixels()) {       char[][] pattern = new char[WIDTH][HEIGHT];       int baseColourPixel = 0, contrastColourPixel = 0, x1 = 0, x2 = 0, y1 = 0, y2 = 0;       int[] pixels = (int[]) p.getPixels();       baseColourPixel = pixels[0];       // System.out.println("base: " + base);       int xCounter = 0, yCounter = 0;       for (int iPixel : pixels) {         // System.out.println(iX + " - " + iY);         if (isReverse) {           pattern[xCounter][yCounter] = iPixel == baseColourPixel ? CHAR_TO_PATTERN : ' ';         } else {           pattern[xCounter][yCounter] = iPixel != baseColourPixel ? CHAR_TO_PATTERN : ' ';         }         yCounter++;         if (yCounter > 49) {           xCounter++;           yCounter = 0;         }         if (contrastColourPixel == 0 && iPixel != baseColourPixel) {           contrastColourPixel = iPixel;           x1 = xCounter - 2;           y1 = yCounter - 3;           y2 = yCounter + 3;         }         if (contrastColourPixel == iPixel) {           x2 = xCounter + 3;           if (y1 > (yCounter - 3)) {             y1 = yCounter - 3;           }           if (y2 < (yCounter + 3)) {             y2 = yCounter + 3;           }         }       }       return new TextualChar(x1, x2, y1, y2, pattern);     }     return null;   }   private static List<TextualChar> getTexualChars(String strText) throws Throwable {     List<TextualChar> returnList = new ArrayList<TextualChar>();     for (byte lbyte : strText.getBytes()) {       TextualChar tChar = getTextualChar((char) lbyte);       returnList.add(tChar);     }     return returnList;   }   public static void main(String[] args) throws Throwable {     List<TextualChar> textualCharList = getTexualChars("Aniruddha");     TextualChar tChar1 = textualCharList.get(0);     int endPos = tChar1.getxPos2();     for (int iCounter = tChar1.getxPos1(); iCounter < endPos; iCounter++) {       for (TextualChar tChar : textualCharList) {         if (endPos < tChar.getxPos2()) {           endPos = tChar.getxPos2();         }         for (int iInnerCounter = tChar.getyPos1(); iInnerCounter < tChar.getyPos2(); iInnerCounter++) {           System.out.print(tChar.getPixelPattern()[iCounter][iInnerCounter]);         }       }       System.out.println();     }   }   static class TextualChar {     private int      xPos1      = 0;     private int      xPos2      = 0;     private int      yPos1      = 0;     private int      yPos2      = 0;     private char[][]  pixelPattern  = new char[WIDTH][HEIGHT];     public TextualChar(int xPos1, int xPos2, int yPos1, int yPos2, char[][] a_pattern) {       this.xPos1 = xPos1;       this.xPos2 = xPos2;       this.yPos1 = yPos1;       this.yPos2 = yPos2;       this.pixelPattern = a_pattern;     }     public char[][] getPixelPattern() {       return pixelPattern;     }     public int getxPos1() {       return xPos1;     }     public int getxPos2() {       return xPos2;     }     public int getyPos1() {       return yPos1;     }     public int getyPos2() {       return yPos2;     }   } }