输出一只猫

作者: ETH_BOSS | 来源:发表于2016-07-30 17:17 被阅读1671次

    下午闲来无聊,想在注释里用*画一只猫,可是吧,怎么画都画不好。就像下面这样:

    cat0.jpg

    于是乎,我萌生了用代码来帮我完成这件事情的念头。
    首先,找到一张猫的图片,比如说这样:


    cat.jpg

    然后,通过在imageview中设置图片,我们可以获取到它的bitmap对象。

    cat= (ImageView) findViewById(R.id.imageView);
    Bitmap bitmap = ((BitmapDrawable)cat.getDrawable()).getBitmap();
    

    获取到bitmap后,只需要通过网格获取每个点上的颜色参数,再通过颜色的不同来判断输出*还是空格,即可画出我们需要的猫。
    这里为了方便,我将每个点的信息封装成了PointColor类:

    
    class PointColor {
    
    private int red;
    private int blue;
    private int green;
    private int x;
    private int y;
    
    PointColor(int x, int y){
        this.x=x;
        this.y=y;
    }
    
    void setColor(int pixel){
        setRed(Color.red(pixel));
        setBlue(Color.blue(pixel));
        setGreen(Color.green(pixel));
    }
    
    public int getRed() {
        return red;
    }
    
    public void setRed(int red) {
        this.red= red;
    }
    
    public int getBlue() {
        return blue;
    }
    
    public void setBlue(int blue) {
         this.blue= blue;
    }
    
    public int getGreen() {
        return green;
    }
    
    private void setGreen(int green) {
        this.green= green;
    }
    
    public int getX() {
        return x;
    }
    
    public void setX(int x) {
        this.x= x;
    }
    
    public int getY() {
        return y;
    }
    
    public void setY(int y) {
        this.y= y;
    }
    }
    
    

    网格的数据我们需要用到一个二维数组来储存,下面初始化一下:

    PointColor[][] points;
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    int POINT_ROW = 80; //行点数
    int POINT_Column =height* POINT_ROW /width; //通过计算算出列点数
    points = new PointColor[POINT_Column][POINT_ROW];
    

    通过bitmap的getPixel方法获取网格上点的数据并输入数组:

    int x_offset = width/(POINT_ROW -1);
    int y_offset = height/(POINT_Column-1);
    for (int i = 0;i<POINT_Column;i++){    
        for (int j = 0; j< POINT_ROW; j++){        
            int x = j*x_offset;       
            int y = i*y_offset;        
            PointColor a = new PointColor(x,y);        
            a.setColor(bitmap.getPixel(x,y));       
            points[i][j]=a;    
        }
    }
    

    输出结果到控制台:

    for (int i=0;i<POINT_Column;i++){   
        for (int j = 0; j< POINT_ROW; j++){
            //这句可以根据图片的情况自行判断,只要取符合条件的点即可。       
            if (points[i][j].getBlue()>0 && points[i][j].getBlue()<200){ 
                System.out.print("*");        
            }else {            
                System.out.print(" ");        
           }    
        }    
    System.out.print("\n");
    }
    

    为了更加美观,推荐使用Klog第三方库进行输出

    9.pic.jpg

    相关文章

      网友评论

      本文标题:输出一只猫

      本文链接:https://www.haomeiwen.com/subject/mrrtsttx.html