博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android默认字体ASCII码中可显示字符的平均灰度由小到大排序
阅读量:6307 次
发布时间:2019-06-22

本文共 5651 字,大约阅读时间需要 18 分钟。

hot3.png

如题:

46,96,39,58,45,44,59,34,95,126,33,94,105,114,124,47,73,61,60,62,42,108,92,49,116,43,106,63,118,41,40,76,102,123,55,125,74,84,99,120,122,93,91,117,110,115,89,111,70,121,101,50,97,86,107,51,104,90,67,52,80,53,65,113,88,112,69,37,48,85,100,98,54,75,83,57,35,72,119,71,36,79,103,68,56,82,81,109,66,38,78,87,77,64

package com.example.test;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.FontMetrics;import android.util.AttributeSet;import android.view.View;public class CharView extends View{	private Paint mPaint;	private char mChar;	private int mTextSize;	private FontMetrics mFm = new FontMetrics();	private Canvas mDrawCanvas = new Canvas();		public CharView(Context context, AttributeSet attrs) {		this(context, attrs, -1);	}	public CharView(Context context) {		this(context, null, -1);	}		public CharView(Context context, AttributeSet attrs, int defStyle) {		super(context, attrs, defStyle);		mPaint = new Paint();		mPaint.setColor(Color.RED);	}		public void setChar(char c) {		mChar = c;		mTextSize = measureChar(c, getMeasuredWidth());		invalidate();	}		private int measureChar(char c, int maxWidth) {		int result = 0;		for (int i = 0; i < maxWidth * 2; i++) {			mPaint.setTextSize(i);			int textSize = (int)mPaint.measureText(String.valueOf(c));			mPaint.getFontMetrics(mFm);			int textHeight = (int)(mFm.bottom - mFm.top);			if (textSize > maxWidth || textHeight > maxWidth) {				result = i;				break;			}		}		return result;	}		@Override	protected void onDraw(Canvas canvas) {		super.onDraw(canvas);		drawInner(canvas);	}		private void drawInner(Canvas canvas) {		if (mTextSize == 0) {			mTextSize = measureChar(mChar, getMeasuredWidth());		}		mPaint.setTextSize(mTextSize);		mPaint.getFontMetrics(mFm);		int baseHeight = -(int)mFm.top;		int x = (int)(getMeasuredWidth() - mPaint.measureText(String.valueOf(mChar))) / 2;//		canvas.drawLine(0, baseHeight+mFm.ascent, 500, baseHeight+mFm.ascent, mPaint);//		canvas.drawLine(0, baseHeight, 500, baseHeight, mPaint);//		canvas.drawLine(0, baseHeight+mFm.descent, 500, baseHeight+mFm.descent, mPaint);//		canvas.drawLine(0, baseHeight+mFm.bottom, 500, baseHeight+mFm.bottom, mPaint);		canvas.drawText(String.valueOf(mChar), x, baseHeight, mPaint);	}		public void drawBitmap(Bitmap bitmap) {		bitmap.eraseColor(Color.TRANSPARENT);		mDrawCanvas.setBitmap(bitmap);		drawInner(mDrawCanvas);	}}

@Override	public void onClick(View v) {		if (mBitmap == null) {			mBitmap = Bitmap.createBitmap(mCharView.getMeasuredWidth(), mCharView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);		}		for (int i = 33; i < 127; i++) {			char c = (char)i;			mCharView.setChar(c);			mCharView.drawBitmap(mBitmap);			int averGray = (int)(calAverageGray(mBitmap) * 100000);			results.put(averGray, c);		}				List
 floats = new ArrayList
(); floats.addAll(results.keySet()); Collections.sort(floats); StringBuilder sb = new StringBuilder(); for (Integer f : floats) { Log.d("Result", results.get(f)+" : "+f); sb.append(String.valueOf((int)results.get(f))).append(","); } Log.d("Result", "result = "+sb.toString()); } private float calAverageGray(Bitmap b) { int width = b.getWidth(); int height = b.getHeight(); int noneWhiteCount = 0; for(int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { int color = b.getPixel(j, i); int r = Color.red(color); int g = Color.green(color); int bl = Color.blue(color);// Log.d("Pix", "pos = "+"("+"j, "+"i"+")"+"rgb = "+r+", "+g+" , "+bl); if (r > 100) { noneWhiteCount++; } } } return noneWhiteCount / (float)(width * height); } private Map
 results = new HashMap
(); private Bitmap mBitmap;
@Override	public void onClick(View v) {		String[] dics = dic.split(",");		int dicCount = dics.length;		File file = new File(Environment.getExternalStorageDirectory(), "test.jpg");		Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());		int width = bitmap.getWidth();		int height = bitmap.getHeight();		int dimen = 10;		int dimenY = (int)(height / (float)width * dimen);		StringBuilder sb = new StringBuilder();		for (int i = 0; i < height; i+= dimen) {			for (int j = 0; j < width; j+= dimenY) {				int w = dimen > width - j ? width - j : dimen;				int h = dimenY > height - i ? height - i : dimenY;				Bitmap temp = Bitmap.createBitmap(bitmap, j, i, w, h);				float averGray = calAverageGray(temp);				temp.recycle();				if (averGray < 128) {					int pos = (int)((128 - averGray) / 128f * dicCount);					pos = pos > dicCount - 1 ? dicCount - 1 : pos;					int charInt = Integer.decode(dics[pos]);					sb.append((char)charInt);				} else {					sb.append(' ');				}			}			sb.append("\n");		}				Log.e("HA", sb.toString());	}		private float calAverageGray(Bitmap b) {		int width = b.getWidth();		int height = b.getHeight();		float grayCount = 0;		for(int i = 0; i < height; i++) {			for (int j = 0; j < width; j++) {				int color = b.getPixel(j, i);				int r = Color.red(color);				int g = Color.green(color);				int bl = Color.blue(color);				grayCount +=(r * 19595 + g * 38469 + bl * 7472) >> 16;			}		}		return grayCount / (width * height);	}	private String dic = "46,96,39,58,45,44,59,34,95,126,33,94,105,114,124,47,73,61,60,62,42,108,92,49,116,43,106,63,118,41,40,76,102,123,55,125,74,84,99,120,122,93,91,117,110,115,89,111,70,121,101,50,97,86,107,51,104,90,67,52,80,53,65,113,88,112,69,37,48,85,100,98,54,75,83,57,35,72,119,71,36,79,103,68,56,82,81,109,66,38,78,87,77,64";

转载于:https://my.oschina.net/u/189899/blog/299967

你可能感兴趣的文章
原产地政策,jsonp跨域
查看>>
HDU 1143 Tri Tiling(递归)
查看>>
ffmpeg参数具体解释
查看>>
记一次公司仓库数据库服务器死锁过程
查看>>
Oracle 11g password过期被锁定报道 ORA-28000 the account is locked
查看>>
【Struts2学习笔记(2)】Action默认值和配置Action于result各种转发类型
查看>>
轨磁条简介
查看>>
(算法)交错的字符串
查看>>
hdu 5471(状压DP or 容斥)
查看>>
oracle.jdbc.driver.OracleDriver和oracle.jdbc.OracleDriver这两个驱动的区别
查看>>
NSQ部署
查看>>
git常用命令记录
查看>>
IBM发布新一代云计算工具包MobileFirst Foundation
查看>>
唯品会HDFS性能挑战和优化实践
查看>>
大规模学习该如何权衡得失?解读NeurIPS 2018时间检验奖获奖论文
查看>>
大厂前端高频面试问题与答案精选
查看>>
我们用5分钟写了一个跨多端项目
查看>>
Visual Studio 15.4发布,新增多平台支持
查看>>
有赞透明多级缓存解决方案(TMC)设计思路
查看>>
如何设计高扩展的在线网页制作平台
查看>>