zoukankan      html  css  js  c++  java
  • android 的数学公式图片转换

         在应用中的数学公式是不能直接以文本显示和输入的,包括在一些学习类网站上看到的公式,他们都是以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? frac{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("下载取消");
                }
            });

    最后来看看效果

  • 相关阅读:
    pat甲级 1155 Heap Paths (30 分)
    pat甲级 1152 Google Recruitment (20 分)
    蓝桥杯 基础练习 特殊回文数
    蓝桥杯 基础练习 十进制转十六进制
    蓝桥杯 基础练习 十六进制转十进制
    蓝桥杯 基础练习 十六进制转八进制
    51nod 1347 旋转字符串
    蓝桥杯 入门训练 圆的面积
    蓝桥杯 入门训练 Fibonacci数列
    链表相关
  • 原文地址:https://www.cnblogs.com/lovemo1314/p/5614769.html
Copyright © 2011-2022 走看看