存档在 2015年1月

替换host文件上google

2015年1月31日

不会谷歌的程序猿不是好的程序猿!

在大天朝,上谷歌竟成了一项”技能”,当然花钱另说,我当然不会花钱啦,之前goagent翻墙已经不好谷歌了,现在的方案是更改HOSTS(C:\Windows\System32\drivers\etc),复制以下Hosts文件替换即可:

http://pan.baidu.com/s/1o63Hqrg

如果此HOSTS不好用,请留言告知,我将及时更新,祝大家工作愉快,生活愉快!

@吴小龙

实现正在加载中界面的Android库:DynamicBox

2015年1月29日

DynamicBox是一个Android库,能够inflates自定义布局来指示出:

  • 正在加载内容
  • 显示一个异常
  • 或者是一个自定义视图

实现正在加载中界面的Android库:DynamicBox

支持:

  • ListView
  • GridView
  • ExpandableListView
  • Activity
  • FragmentActivity
  • Fragment
  • LinearLayout
  • RelativeLayout
  • ScrollView

示例

  • View
ListView lv = (ListView)findViewById(R.id.listView); DynamicBox box = new DynamicBox(this,lv);
  • Layout id
DynamicBox box = new DynamicBox(this,R.layout.activity_activity);

To Show the loading View

box.showLoadingLayout();

To Show Internet off View

box.showInternetOffLayout();

To Show Exception View

box.showExceptionLayout();

To Show a Custom View

View customView = getLayoutInflater().inflate(R.layout.custom_view, null, false); box.addCustomView(customView,"greenmonster"); box.showCustomView("greenmonster");

**To set Loading Message **

box.setLoadingMessage("Loading your music ...");

项目主页:https://github.com/medyo/dynamicbox

ViewPager has not been bound.

2015年1月28日

出错描述:
Exception raised during rendering: ViewPager has not been bound.
Exception details are logged in Window > Show View > Error Log

java.lang.IllegalStateException: ViewPager has not been bound.
at com.viewpagerindicator.TabPageIndicator.setCurrentItem(TabPageIndicator.java:240)
at com.viewpagerindicator.TabPageIndicator.onMeasure(TabPageIndicator.java:116)
解决方案:
xml中添加:android:visibility=”gone”

JFinal相关

2015年1月27日

1.jfinal-scheduler 极简JFinal任务插件 jfinal-scheduler 极简JFinal任务插件
Zbus的JFinal插件实现第二版Zbus的JFinal插件实现第二版
3.jfinal_demojfinal_demo

4.某JFinal相关作品:

JFinal个人博客:http://git.oschina.net/596392912/jnode

JFinal-event事件驱动:http://git.oschina.net/596392912/JFinal-event

JFinal-assets js、css在线合并压缩插件:http://git.oschina.net/596392912/JFinal-assets

JFinal基础工具集:http://git.oschina.net/596392912/JFinal-commons

第三方登录工具包:http://git.oschina.net/596392912/JFinal-oauth2.0-login

JFinal生成工具:http://git.oschina.net/596392912/jfinal-rapid (用来生成含有get、set的model和数据字典,可扩展来生成通用页面控制器等)

3篇MySQL优化博文

2015年1月24日

sql优化博文
http://my.oschina.net/goto/blog/89304

http://my.oschina.net/h2do/blog/268136

http://my.oschina.net/liujinlongno1/blog/156101

基于DM8127 &IPNC RDK 3.8的实时图像处理阶段记录

2015年1月13日

1.最近对IPNC RDK3.8整个开发套件的框架结构和大部分代码进行了熟悉,感觉总体上还行,但是很多细节上的地方还是很迷糊。
2.对RVM LINK进行了改造,实现了CAMER–>VPSS—>DSP(processlink也行)—>VPSS—>DISPLAY的link。
3.对输出的YUV422格式有了一定了解,并在DSP上实现了灰度图像处理。
4.接下来就是真正的算法移植.

Enjoy!!
20150113_213902

yuv422 转 gray image

2015年1月13日

Could you describe in more detail what you want the grey image format to be?

If you just want a luminance/brightness value for each pixel than you can just strip the Y values out of the existing YCbCr buffer for processing which would give you an array of byte values, one for each pixel, where the value represents the brightness of the pixel. I am not sure I understand why you want to convert to a RGB888 format if all you require is a grey version of the image.

In the code example here on the wiki there is actually a function that will take a YCbCr buffer and make it appear greyscale by wiping out all the color data, you could do a similar operation to make a buffer greyscale data in the format you are trying to work with.

//make the image greyscale by setting all chrominance to 0x80
void process_imagebw( void* currentFrame,  int yRows, int xPixels)
{
   
 int xx = 0;
 
     for( xx = 0; xx < (yRows * xPixels)*2; xx+=2 )//just operating on the chroma
      {

            *( ( (unsigned char*)currentFrame ) + xx ) = 0x80; //set all chroma to midpoint 0x80
         }

 
} // End process_imagebw()

参考文献:
1.http://e2e.ti.com/search?q=YUV422
2.http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/99/p/6155/23101#23101
3.http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/8521/34684#34684
4.http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/99/t/121390
5.http://www.filtermeister.com/wiki/index.php?page=RGB+to+Grayscale+Conversion
6.http://processors.wiki.ti.com/index.php?title=Accessing_pixels_in_a_frame_on_DM643x

AsyncTask

2015年1月9日

AsyncTask定义了三种泛型类型 Params,Progress和Result。

Params 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String。
使用过AsyncTask 的同学都知道一个异步加载数据最少要重写以下这两个方法:

doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
onPostExecute(Result) 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回
有必要的话你还得重写以下这三个方法,但不是必须的:

onProgressUpdate(Progress…) 可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。
onPreExecute() 这里是最终用户调用Excute时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。
onCancelled() 用户调用取消时,要做的操作
使用AsyncTask类,以下是几条必须遵守的准则:

Task的实例必须在UI thread中创建;
execute方法必须在UI thread中调用;
不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params…), onProgressUpdate(Progress…)这几个方法;
该task只能被执行一次,否则多次调用时将会出现异常;
一个超简单的理解 AsyncTask 的例子:
main.xml

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    >  
    <TextView    
    android:id="@+id/textView01"  
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"   
    />  
   <ProgressBar   
   android:id="@+id/progressBar02"  
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"   
    style="?android:attr/progressBarStyleHorizontal"   
    />  
    <Button  
    android:id="@+id/button03"  
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"   
    android:text="更新progressbar"  
    />  
</LinearLayout>  

MainActivity.java

package net.unix8.main;  
  
import android.app.Activity;  
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.ProgressBar;  
import android.widget.TextView;  
  
public class MainActivity extends Activity {  
    private Button button;  
    private ProgressBar progressBar;  
    private TextView textView;  
      
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
        button = (Button)findViewById(R.id.button03);  
        progressBar = (ProgressBar)findViewById(R.id.progressBar02);  
        textView = (TextView)findViewById(R.id.textView01);  
          
        button.setOnClickListener(new OnClickListener() {  
              
            @Override  
            public void onClick(View v) {  
                ProgressBarAsyncTask asyncTask = new ProgressBarAsyncTask(textView, progressBar);  
                asyncTask.execute(1000);  
            }  
        });  
    }  
}  

NetOperator.java

package net.unix8.main;  
//模拟网络环境  
public class NetOperator {  
      
    public void operator(){  
        try {  
            //休眠1秒  
            Thread.sleep(1000);  
        } catch (InterruptedException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  
  
}  

ProgressBarAsyncTask .java

package net.unix8.main;  
import android.os.AsyncTask;  
import android.widget.ProgressBar;  
import android.widget.TextView;  
  
/**  
 * 生成该类的对象,并调用execute方法之后  
 * 首先执行的是onProExecute方法  
 * 其次执行doInBackgroup方法  
 *  
 */  
public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> {  
  
    private TextView textView;  
    private ProgressBar progressBar;  
      
      
    public ProgressBarAsyncTask(TextView textView, ProgressBar progressBar) {  
        super();  
        this.textView = textView;  
        this.progressBar = progressBar;  
    }  
  
  
    /**  
     * 这里的Integer参数对应AsyncTask中的第一个参数   
     * 这里的String返回值对应AsyncTask的第三个参数  
     * 该方法并不运行在UI线程当中,主要用于异步操作,所有在该方法中不能对UI当中的空间进行设置和修改  
     * 但是可以调用publishProgress方法触发onProgressUpdate对UI进行操作  
     */  
    @Override  
    protected String doInBackground(Integer... params) {  
        NetOperator netOperator = new NetOperator();  
        int i = 0;  
        for (i = 10; i <= 100; i+=10) {  
            netOperator.operator();  
            publishProgress(i);  
        }  
        return i + params[0].intValue() + "";  
    }  
  
  
    /**  
     * 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值)  
     * 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置  
     */  
    @Override  
    protected void onPostExecute(String result) {  
        textView.setText("异步操作执行结束" + result);  
    }  
  
  
    //该方法运行在UI线程当中,并且运行在UI线程当中 可以对UI空间进行设置  
    @Override  
    protected void onPreExecute() {  
        textView.setText("开始执行异步线程");  
    }  
  
  
    /**  
     * 这里的Intege参数对应AsyncTask中的第二个参数  
     * 在doInBackground方法当中,,每次调用publishProgress方法都会触发onProgressUpdate执行  
     * onProgressUpdate是在UI线程中执行,所有可以对UI空间进行操作  
     */  
    @Override  
    protected void onProgressUpdate(Integer... values) {  
        int vlaue = values[0];  
        progressBar.setProgress(vlaue);  
    }  
}