在应用中的数学公式是不能直接以文本显示和输入的,包括在一些学习类网站上看到的公式,他们都是以gif图片的形式展示出来的。而怎么样生成各种各样的gif图片形式的数学公式呢,此处未作深入研究,我所知道的是

输入一些具有一定的规则的latex文本,然后再通过图片生成工具去解析latex字串并生成一个对应的gif公式文件。

本次Demo用到的转换服务的网站就是  http://www.codecogs.com/latex/about.php, 如果你胶转换图片的源代码(C++),那你就可以在本地完成这一工作了。

可以通过这个网站上提供的公式编辑器进行公式编辑获取到gif公式图片, 也可以通过http请求的方式去获取gif图片.

1、网站上的公式编辑 地址 http://latex.codecogs.com/eqneditor/editor-api.php, 就像这样

左边框框里的是latex文本, 右边会同时生成的gif图片,这个编辑器能让你很快的知道公式对应的latex文本写法,比较好用啊。

也可以去latex公式库里查找,根据各个字符的latex文本再拼接出来,这里给出一个链接,http://www.mohu.org/info/symbols/symbols.htm,在里面基本上可以找到你想要的公式的latex写法。

2、现在来开始我们的demo, 让android 客户端从服务器上取gif图片。

公式图片转换的请求很简单, 只要在http://latex.codecogs.com/gif.latex?后面跟上latex文本就可以了。比如 http://latex.codecogs.com/gif.latex?\tfrac{a} {ab}就能得到上述a/ab的图片了

在写url的时候一定要注意,RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。因此url不允许\{}空格等字符出现,只要出现肯定报错,而在网页里

可以出现这些字符,那是因为浏览器自动将它们进行了编码,相信你们之前也应该注意到了浏览器地址栏里出现一些类似于%20%7d这样的符号吧,那就是编码后的16进制码。所以上述url必须要进行本地编码了。

demo的关键代码如下,像xml, activity那些平常的代码就不贴出来了,这个Demo也不复杂。

private final String host = "http://latex.codecogs.com/gif.latex?";
//此处进行16进制编码,这里只做了\ {}这4个符号编码
private String encode(String url){
url = url.replace("\\", "%5c").replace(" ", "%20")
.replace("{", "%7b").replace("}", "%7d");
return url;
}
// 加载图片
//etLatex是输入latex文本的edittext
String latexstr = etLatex.getText().toString().trim();
String url = host + latexstr;
//http请求用的是xutils3, ivMath是显示公式图片的imageview
x.image().bind(ivMath, encode(url), options, new RequestDataCallback<Drawable>() { @Override
protected void success(Drawable drawable) {
LogUtil.e("下载成功");
} @Override
protected void fail() {
LogUtil.e("下载出错," );
} @Override
protected void finish() {
LogUtil.e("下载完成");
} @Override
public void onCancelled(CancelledException arg0) {
LogUtil.e("下载取消");
}
});

最后来看看效果

android 的数学公式图片转换的更多相关文章

  1. android将drawable下的图片转换成bitmap

    将drawable下的图片转换成bitmap 1. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.xx ...

  2. Android 将drawable下的图片转换成bitmap、Drawable

    将drawable下的图片转换成bitmap . Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.xxx ...

  3. Android  PNG透明图片转JPG格式背景变黑

    Android  PNG透明图片转JPG格式背景变黑 在上传图片是,需要把PNG格式转换成JPG格式的,但是在遇上透明背景时,转过来就变成黑色底图了! 原因是PNG支持透明图而 JPG格式不支持透明底 ...

  4. 【转】Picasso – Android系统的图片下载和缓存类库

    来源:http://blog.chengyunfeng.com/?p=492 另一篇参考:http://blog.csdn.net/xu_fu/article/details/17043231 Pic ...

  5. Picasso – Android系统的图片下载和缓存类库

    Picasso – Android系统的图片下载和缓存类库 Picasso 是Square开源的一个用于Android系统下载和缓存图片的项目.该项目和其他一些下载图片项目的主要区别之一是:使用4.0 ...

  6. java 图片转换成base64字符串

    import java.io.ByteArrayOutputStream; import java.io.FileInputStream;import java.io.FileOutputStream ...

  7. Android常用的图片加载库

     Android常用的图片加载库 前言:图片加载涉及到图片的缓存.图片的处理.图片的显示等.四种常用的图片加载框架,分别是Fresco.ImageLoader. Picasso. Glide. Uni ...

  8. Python开发GUI实战:图片转换素描画工具!

    奋斗没有终点 好好学习72变,因为将来 没有人能替你阻挡81难 . 生如蝼蚁,当有鸿鹄之志: 命如纸薄,应有不屈之心 . ​ 今天被这句话触动了,所以开篇分享给大家.鸡汤有毒,但有时大家却靠它激励自己 ...

  9. android listview展示图片

    最近学习android开发,感触颇多,和网站开发对比,还是有很大的差距,在这里记录一下. android listview展示图片 在网站开发上,展示图片非常简单,一个HTML img标签就搞定,加上 ...

随机推荐

  1. study notes for python

    some useful materials Python完全新手教程 http://www.cnblogs.com/taowen/articles/11239.aspx (from taowen, B ...

  2. 第8章 BOM

    8.1 window对象 window有双重的角色,既可以通过JavaScript访问浏览器窗口的接口,又是ECMAScript规定的Global对象. 全局作用域中声明的变量.函数都会变成windo ...

  3. c语言-链表VS数组

    数组和链表的区别   数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素.但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要 ...

  4. 56992 vuser_init.c(12): Error: Socket descriptor not found.

    Loadrunner 运行场景时提示" vuser_init.c(12): Error: Socket descriptor not found.  Hint: the problem mi ...

  5. VS使用过程中,编写JS没有智能提示解决方法

    问题:编写基本Script代码没有问题,但是在编写DOM代码时候没有智能提示.也就是在编写一般javascript代码时候没有问题,但是要写DOM代码的时候发现没有智能提示,如document等都需要 ...

  6. IOS系列swift语言之课时八

    这节课需要讲的就是可选链,内存管理,引用计数,unowned解决 //: Playground - noun: a place where people can play import UIKit / ...

  7. IOS系列swift语言之课时五

    过了几天没来理博客了,这次我们要讲的有:类,属性,初始化init(),初始化器,构造器等 直接刷代码了....... //: Playground - noun: a place where peop ...

  8. 简例 一次执行多条mysql insert语句

    package com.demo.kafka;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Prep ...

  9. M站开发规范——By Klax

    M站开发的规范,根据具体情况,涉及代码组织的模式,代码编码风格,模块化等,经...研究...决定: 1.采用AMD 规范(RequireJS)实现js模块化. 2.单个文件尽量采用面向对象编程和模块化 ...

  10. windows下C++环境的配置

    方法一--VS: 使用windows开发神器visio studio.这种方法比较简单,直接下载一个最新的vs安装就行.不单单是C++,C.C#.VB等都可以开发. 方法二--只安装C++编译器: 最 ...