文档章节

图像转换

千里山南
 千里山南
发布于 2014/08/22 14:05
字数 530
阅读 108
收藏 5
@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<Integer> floats = new ArrayList<Integer>();
//		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());
		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();
		Bitmap dest = Bitmap.createBitmap(width * 2, height * 2, Bitmap.Config.ARGB_8888);
		Canvas canvas = new Canvas(dest);
		Paint paint = new Paint();
		paint.setTextSize(8);
		float textsize = paint.measureText("W");
		float textHeight = paint.descent() - paint.ascent();
		float textPosY = - paint.ascent();
		float textPosX = - 0;
//		int dimen = 4;
//		int dimenY = (int)(dimen * 2.23f);
		int dimen = (int)textsize / 2;
		int dimenY = (int)textHeight / 2;
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < height; i+= dimenY) {
			for (int j = 0; j < width; j+= dimen) {
				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();
				int threshold = 180;
				if (averGray < threshold) {
					int pos = (int)((threshold - averGray) / (float)threshold * dicCount);
					pos = pos > dicCount - 1 ? dicCount - 1 : pos;
					int charInt = Integer.decode(dics[pos]);
					sb.append((char)charInt);
					canvas.drawText(String.valueOf((char)charInt), textPosX, textPosY, paint);
				} else {
					sb.append(' ');
				}
				textPosX += textsize;
			}
			textPosY += textHeight;
			textPosX = 0;
			sb.append("\n");
		}
		
		saveBitmapToFile(dest, Environment.getExternalStorageDirectory().getAbsolutePath(), "dest.png", true, false);
		Log.e("HA", sb.toString());
		((TextView)findViewById(R.id.mytext)).setText(sb.toString());
		File file2 = new File(Environment.getExternalStorageDirectory(), "test.txt");
		BufferedWriter bw = null;
		try {
			bw = new BufferedWriter(new FileWriter(file2));
			bw.write(sb.toString());
			bw.flush();
		} catch (IOException e) {
		} finally {
			if (bw != null) {
				try {bw.close();}catch(Exception e){};
			}
		}
	}
	
	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);
	}
	
	
	/**
	 * 保存bitmap到文件中,由于不知道当前bitmap的格式,可能导致保存后文件变大或变小,慎重使用
	 * @param bitmap
	 * @param path
	 * @param name
	 * @param isHighDefinition png或jpg存储
	 * @param recycleSelf 是否释放该位图
	 */
	public static void saveBitmapToFile(Bitmap bitmap, String path, String name, boolean isHighDefinition, boolean recycleSelf) {
		File file = new File(path);  
		if (!file.exists()) {  
			file.mkdirs();  
		}  

		File imageFile = new File(file, name);
		// 如果文件已经存在,则不继续保存
		if (imageFile.exists()) {
			return;
		}
		FileOutputStream fos = null;
		try {  
			imageFile.createNewFile();  
			fos = new FileOutputStream(imageFile);
			// TODO 后续可以根据分辨率来保存不同图片质量
			if (isHighDefinition) {
				bitmap.compress(CompressFormat.PNG, 100, fos);  
			} else {
				bitmap.compress(CompressFormat.JPEG, 50, fos);  
			}
		} catch (FileNotFoundException e) {
		} catch (IOException e) {
		} finally {
			if (fos != null) {
				try {
					fos.flush();
				} catch (IOException e) {
				}  
				try {
					fos.close();
				} catch (IOException e) {
				}
			}
		}
	}
	
	private Map<Integer, Character> results = new HashMap<Integer, Character>();
	private Bitmap mBitmap;
	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";


© 著作权归作者所有

千里山南
粉丝 8
博文 26
码字总数 8030
作品 1
合肥
私信 提问
基于深度学习的图像语义编辑

深度学习在图像分类、物体检测、图像分割等计算机视觉问题上都取得了很大的进展,被认为可以提取图像高层语义特征。基于此,衍生出了很多有意思的图像应用。 为了提升本文的可读性,我们先来...

xinzhangyanxiang
2017/04/12
0
0
GANs中的明星StarGAN:使用单一模型执行多个域的图像转换,GAN之父点赞

雷锋网按:2017年可谓“GANs之年”,各种基于GANs的模型和变化层出不穷。近日,韩国首尔大学团队发布了一篇“StarGAN:Unified Generative Adversarial Networks for Multi-Domain Image-to...

岑大师
2017/11/29
0
0
用OCR文字识别软件怎么把图像文件转换成Excel

图像文件可以通过ABBYY FineReader 12 OCR文字识别软件转换为Word文档,同样也能用来转换图像为Excel电子表格,过程与前者大同小异,只要掌握了ABBYY FineReader的使用技巧,你想要的格式都能...

ABBYY
2016/09/14
1K
0
在 Linux 下将 PNG 和 JPG 批量互转的四种方法

导读 计算机术语中,批处理指的是用一个非交互式的程序来执行一序列的任务的方法。这篇教程里,我们会使用 Linux 命令行工具,并提供 4 种简单的处理方式来把一些.PNG格式的图像批量转换成....

linux小陶
2016/12/16
2
0
[Python图像处理] 五.图像融合、加法运算及图像类型转换

版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/82347501 该系列文章是讲解Python OpenCV图像处理知识,前...

Eastmount
2018/09/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部