Java获取字符串的像素点阵并在命令行下打印输出

Wesley13
• 阅读 504

下面这个小程序可以获取字符串点阵并在命令行下打印输出:

public class StringPixelUtils {
    private static final Map<String, boolean[][]> lettersMap = new HashMap<>();

    /* 在内存 BufferedImage里输出文本并获取它的像素点 */
    public static boolean[][] getStringPixels(String fontName, int fontStyle, int fontSize, String s) {
        String key = new StringBuilder(fontName).append("_").append(fontStyle).append("_").append(fontSize).append("_")
                .append(s).toString();
        if (lettersMap.containsKey(key))
            return lettersMap.get(key);
        Font font = new Font(fontName, fontStyle, fontSize);

        BufferedImage bi = new BufferedImage(fontSize * 8, fontSize * 50, BufferedImage.TYPE_INT_RGB);
        Graphics g = bi.getGraphics();
        Graphics2D g2d = (Graphics2D) g;
        g2d.setFont(font);
        FontMetrics fm = g2d.getFontMetrics();
        int strHeight = fm.getAscent() + fm.getDescent() - 3;
        int strWidth = fm.stringWidth(s); 
        g2d.drawString(s, 0, fm.getAscent() - fm.getLeading() - 1); 
        boolean[][] b = new boolean[strHeight][strWidth];
        for (int y = 0; y < strHeight; y++)
            for (int x = 0; x < strWidth; x++)
                if (bi.getRGB(x, y) == -1)
                    b[y][x] = true;
                else
                    b[y][x] = false;
        lettersMap.put(key, b);
        return b;
    }

    public static void main(String[] args) {
        boolean[][] c = getStringPixels(Font.SANS_SERIF, Font.PLAIN, 12, "Test点阵输出");
        for (int y = 0; y < c.length; y++) {
            boolean[] line = c[y];
            for (int x = 0; x < line.length; x++)
                if (c[y][x])
                    System.out.print("*");
                else
                    System.out.print(" ");
            System.out.println();
        }
    }
}

getStringPixels的参数依次为字体名,字体风格,字体大小及要获取像素点的字符串。上例显示结果为:

                             **     ****  *      *     *         *      
*******               *      *   *  *  ******** ****  * *    *   *   *  
   *                  *      ****** *  *  *      *   *   *   *   *   *  
   *     ***    ***  ***     *      * *  * *    * * * *** *  *   *   *  
   *    *   *  *   *  *   ********  * *  * *    * *          *********  
   *    *   *  *      *   *      *  *  * *****  *******   *      *      
   *    *****   ***   *   *      *  *  *   *      * * * * * *    *    * 
   *    *          *  *   ********  ** * ******   ***** * * *    *    * 
   *    *   *  *   *  *             * *    *    *** * * * * *    *    * 
   *     ***    ***   ** * *  *  *  *      *      * ***   * *********** 
                        *   *  *  * *      *      * * *  ** *         *
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Stella981 Stella981
3年前
JS 苹果手机日期显示NaN问题
问题描述newDate("2019122910:30:00")在IOS下显示为NaN原因分析带的日期IOS下存在兼容问题解决方法字符串替换letdateStr"2019122910:30:00";datedateStr.repl
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这