﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-SIMONE-随笔分类-android</title><link>http://www.blogjava.net/wangxinsh55/category/49650.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Sep 2011 00:09:49 GMT</lastBuildDate><pubDate>Tue, 27 Sep 2011 00:09:49 GMT</pubDate><ttl>60</ttl><item><title>Android图片处理（Matrix,ColorMatrix）</title><link>http://www.blogjava.net/wangxinsh55/archive/2011/09/26/359537.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 26 Sep 2011 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2011/09/26/359537.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/359537.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2011/09/26/359537.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/359537.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/359537.html</trackback:ping><description><![CDATA[<div><div id="cnblogs_post_body"><h1><div>http://www.cnblogs.com/leon19870907/archive/2011/03/09/1978065.html</div><br /><span style="font-weight: normal; line-height: 21px; font-size: 14px;"></span></h1><h1><br /></h1><h1><span style="font-weight: normal; line-height: 21px; font-size: 14px;">在编程中有时候需要对图片做特殊的处理，比如将图片做出黑白的，或者老照片的效果，有时候还要对图片进行变换，以拉伸，扭曲等等。</span></h1> <h1><span style="font-weight: normal; line-height: 21px; font-size: 14px;">这些效果在android中有很好的支持，通过颜色矩阵</span><span style="font-weight: normal; line-height: 21px; font-size: 14px;">（ColorMatrix）和坐标变换矩阵（Matrix）可以完美的做出上面的所说的效果。</span></h1> <h1><span style="font-weight: normal; line-height: 21px; font-size: 14px;">下面将分别介绍这两个矩阵的用法和相关的函数。</span></h1> <p><strong>颜色矩阵</strong><br />android中可以通过颜色矩阵（ColorMatrix类）方面的操作颜色，颜色矩阵是一个5x4 的矩阵（如图1.1）</p> <p>可以用来方面的修改图片中RGBA各分量的值，颜色矩阵以一维数组的方式存储如下：<br />&nbsp;[ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t ]<br />他通过RGBA四个通道来直接操作对应颜色，如果会使用Photoshop就会知道有时处理图片通过控制RGBA各颜色通道来做出特殊的效果。</p> <p>这个矩阵对颜色的作用计算方式如1.3示：<br /><br /><a id="url_2" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/12713816310wSz1syZ.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_12713816310wSz1syZ.png" border="0"  alt="" /></a><br />矩阵的运算规则是矩阵A的一行乘以矩阵C的一列作为矩阵R的一行，</p> <p>C矩阵是图片中包含的ARGB信息，R矩阵是用颜色矩阵应用于C之后的新的颜色分量，运算结果如下：<br />&nbsp;<br />R' = a*R + b*G + c*B + d*A + e;<br />G' = f*R + g*G + h*B + i*A + j;<br />B' = k*R + l*G + m*B + n*A + o;<br />A' = p*R + q*G + r*B + s*A + t;<br />&nbsp;<br />颜色矩阵并不是看上去那么深奥，其实需要使用的参数很少，而且很有规律第一行决定红色第二行决定绿色</p> <p>第三行决定蓝色，第四行决定了透明度，第五列是颜色的偏移量。下面是一个实际中使用的颜色矩阵。<br /><br /><a id="url_3" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271381666y9yeN31S.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381666y9yeN31S.png" border="0"  alt="" /></a><br />如果把这个矩阵作用于各颜色分量的话，R=A*C，计算后会发现，各个颜色分量实际上没有任何的改变(R'=R G'=G B'=B A'=A)。<br /><a id="url_4" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271381693ZrrIsDUa.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381693ZrrIsDUa.png" border="0"  alt="" /></a><br />图1.5所示矩阵计算后会发现红色分量增加100，绿色分量增加100，</p> <p>这样的效果就是图片偏黄，因为<span style="font-family: arial, helvetica, sans-serif;">红色和绿色混合后得到黄色</span>，黄色增加了100，图片当然就偏黄了。<br /><a id="url_5" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271381725l0fGeSkP.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381725l0fGeSkP.png" border="0"  alt="" /></a><br />改变各颜色分量不仅可以通过修改第5列的颜色偏移量也可如上面矩阵所示将对应的颜色值乘以一个倍数，直接放大。</p> <p>上图1.6是将绿色分量乘以2变为原来的2倍。相信读者至此已经明白了如何通过颜色矩阵来改变各颜色分量。</p> <p>下面编写一段代码来，通过调整颜色矩阵来获得不同的颜色效果，JavaCode如下：<br />复制到剪贴板&nbsp;&nbsp;Java代码</p> <div> <div><span style="color: #008080;"> 1</span> <span style="color: #000000;">CMatrix类：  <br /></span><span style="color: #008080;"> 2</span> &nbsp;<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> CMatrix </span><span style="color: #0000ff;">extends</span><span style="color: #000000;"> Activity {  <br /></span><span style="color: #008080;"> 3</span> <span style="color: #000000;">      <br /></span><span style="color: #008080;"> 4</span>  <span style="color: #0000ff;">private</span><span style="color: #000000;"> Button change;  <br /></span><span style="color: #008080;"> 5</span>  <span style="color: #0000ff;">private</span><span style="color: #000000;"> EditText [] et</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> EditText[</span><span style="color: #000000;">20</span><span style="color: #000000;">];  <br /></span><span style="color: #008080;"> 6</span>  <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">float</span><span style="color: #000000;"> []carray</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span> <span style="color: #0000ff;">float</span><span style="color: #000000;">[</span><span style="color: #000000;">20</span><span style="color: #000000;">];  <br /></span><span style="color: #008080;"> 7</span>  <span style="color: #0000ff;">private</span><span style="color: #000000;"> MyImage sv;  <br /></span><span style="color: #008080;"> 8</span> <span style="color: #000000;">    @Override  <br /></span><span style="color: #008080;"> 9</span>  <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onCreate(Bundle savedInstanceState) {  <br /></span><span style="color: #008080;">10</span>  <span style="color: #0000ff;">super</span><span style="color: #000000;">.onCreate(savedInstanceState);  <br /></span><span style="color: #008080;">11</span> <span style="color: #000000;">        setContentView(R.layout.main);  <br /></span><span style="color: #008080;">12</span> <span style="color: #000000;">          <br /></span><span style="color: #008080;">13</span> <span style="color: #000000;">       change</span><span style="color: #000000;">=</span><span style="color: #000000;">(Button)findViewById(R.id.set);  <br /></span><span style="color: #008080;">14</span> <span style="color: #000000;">       sv</span><span style="color: #000000;">=</span><span style="color: #000000;">(MyImage)findViewById(R.id.MyImage);  <br /></span><span style="color: #008080;">15</span> <span style="color: #000000;">      <br /></span><span style="color: #008080;">16</span>  <span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">20</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){  <br /></span><span style="color: #008080;">17</span> <span style="color: #000000;">            <br /></span><span style="color: #008080;">18</span> <span style="color: #000000;">       et[i]</span><span style="color: #000000;">=</span><span style="color: #000000;">(EditText)findViewById(R.id.indexa</span><span style="color: #000000;">+</span><span style="color: #000000;">i);  <br /></span><span style="color: #008080;">19</span> <span style="color: #000000;">       carray[i]</span><span style="color: #000000;">=</span><span style="color: #000000;">Float.valueOf(et[i].getText().toString());  <br /></span><span style="color: #008080;">20</span> <span style="color: #000000;">       }  <br /></span><span style="color: #008080;">21</span> <span style="color: #000000;">          <br /></span><span style="color: #008080;">22</span> <span style="color: #000000;">       change.setOnClickListener(l);  <br /></span><span style="color: #008080;">23</span> <span style="color: #000000;">    }  <br /></span><span style="color: #008080;">24</span> <span style="color: #000000;">      <br /></span><span style="color: #008080;">25</span>  <span style="color: #0000ff;">private</span><span style="color: #000000;"> Button.OnClickListener l</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Button.OnClickListener(){  <br /></span><span style="color: #008080;">26</span> <span style="color: #000000;">   <br /></span><span style="color: #008080;">27</span> <span style="color: #000000;">       @Override  <br /></span><span style="color: #008080;">28</span>  <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onClick(View arg0) {  <br /></span><span style="color: #008080;">29</span>  <span style="color: #008000;">//</span><span style="color: #008000;"> TODO Auto-generated method stub  </span><span style="color: #008000;"><br /></span><span style="color: #008080;">30</span> &nbsp;<span style="color: #000000;">           getValues();  <br /></span><span style="color: #008080;">31</span> <span style="color: #000000;">           sv.setValues(carray);  <br /></span><span style="color: #008080;">32</span> <span style="color: #000000;">           sv.invalidate();  <br /></span><span style="color: #008080;">33</span> <span style="color: #000000;">       }  <br /></span><span style="color: #008080;">34</span> <span style="color: #000000;">          <br /></span><span style="color: #008080;">35</span> <span style="color: #000000;">    };  <br /></span><span style="color: #008080;">36</span>  <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> getValues(){  <br /></span><span style="color: #008080;">37</span>  <span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">20</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){  <br /></span><span style="color: #008080;">38</span> <span style="color: #000000;">              <br /></span><span style="color: #008080;">39</span> <span style="color: #000000;">            carray[i]</span><span style="color: #000000;">=</span><span style="color: #000000;">Float.valueOf(et[i].getText().toString());  <br /></span><span style="color: #008080;">40</span> <span style="color: #000000;">        }  <br /></span><span style="color: #008080;">41</span> <span style="color: #000000;">          <br /></span><span style="color: #008080;">42</span> <span style="color: #000000;">    }  <br /></span><span style="color: #008080;">43</span> <span style="color: #000000;">   <br /></span><span style="color: #008080;">44</span> <span style="color: #000000;">      <br /></span><span style="color: #008080;">45</span> <span style="color: #000000;">}  <br /></span><span style="color: #008080;">46</span> <span style="color: #000000;">MyImage类继承自View类：  <br /></span><span style="color: #008080;">47</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> MyImage </span><span style="color: #0000ff;">extends</span><span style="color: #000000;"> View {  <br /></span><span style="color: #008080;">48</span>  <span style="color: #0000ff;">private</span><span style="color: #000000;"> Paint mPaint </span><span style="color: #000000;">=</span> <span style="color: #0000ff;">new</span><span style="color: #000000;"> Paint(Paint.ANTI_ALIAS_FLAG);  <br /></span><span style="color: #008080;">49</span>  <span style="color: #0000ff;">private</span><span style="color: #000000;"> Bitmap mBitmap;  <br /></span><span style="color: #008080;">50</span>  <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">float</span><span style="color: #000000;"> [] array</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span> <span style="color: #0000ff;">float</span><span style="color: #000000;">[</span><span style="color: #000000;">20</span><span style="color: #000000;">];  <br /></span><span style="color: #008080;">51</span> <span style="color: #000000;">      <br /></span><span style="color: #008080;">52</span>  <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">float</span><span style="color: #000000;"> mAngle;  <br /></span><span style="color: #008080;">53</span> <span style="color: #000000;">      <br /></span><span style="color: #008080;">54</span>  <span style="color: #0000ff;">public</span><span style="color: #000000;"> MyImage(Context context,AttributeSet attrs) {  <br /></span><span style="color: #008080;">55</span>  <span style="color: #0000ff;">super</span><span style="color: #000000;">(context,attrs);  <br /></span><span style="color: #008080;">56</span> <span style="color: #000000;">          <br /></span><span style="color: #008080;">57</span> <span style="color: #000000;">        mBitmap    </span><span style="color: #000000;">=</span><span style="color: #000000;"> BitmapFactory.decodeResource(context.getResources(),  <br /></span><span style="color: #008080;">58</span> <span style="color: #000000;">                                               R.drawable.test);  <br /></span><span style="color: #008080;">59</span> <span style="color: #000000;">        invalidate();  <br /></span><span style="color: #008080;">60</span> <span style="color: #000000;">    }  <br /></span><span style="color: #008080;">61</span> <span style="color: #000000;">     <br /></span><span style="color: #008080;">62</span> <span style="color: #000000;">      <br /></span><span style="color: #008080;">63</span>  <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setValues(</span><span style="color: #0000ff;">float</span><span style="color: #000000;"> [] a){  <br /></span><span style="color: #008080;">64</span>  <span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">20</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){  <br /></span><span style="color: #008080;">65</span> <span style="color: #000000;">           array[i]</span><span style="color: #000000;">=</span><span style="color: #000000;">a[i];  <br /></span><span style="color: #008080;">66</span> <span style="color: #000000;">        }  <br /></span><span style="color: #008080;">67</span> <span style="color: #000000;">          <br /></span><span style="color: #008080;">68</span> <span style="color: #000000;">    }  <br /></span><span style="color: #008080;">69</span> <span style="color: #000000;">      <br /></span><span style="color: #008080;">70</span> <span style="color: #000000;">    @Override </span><span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onDraw(Canvas canvas) {  <br /></span><span style="color: #008080;">71</span> <span style="color: #000000;">        Paint paint </span><span style="color: #000000;">=</span><span style="color: #000000;"> mPaint;  <br /></span><span style="color: #008080;">72</span> <span style="color: #000000;">          <br /></span><span style="color: #008080;">73</span> <span style="color: #000000;">          <br /></span><span style="color: #008080;">74</span> <span style="color: #000000;">          <br /></span><span style="color: #008080;">75</span> <span style="color: #000000;">        paint.setColorFilter(</span><span style="color: #0000ff;">null</span><span style="color: #000000;">);  <br /></span><span style="color: #008080;">76</span> <span style="color: #000000;">        canvas.drawBitmap(mBitmap, </span><span style="color: #000000;">0</span><span style="color: #000000;">, </span><span style="color: #000000;">0</span><span style="color: #000000;">, paint);  <br /></span><span style="color: #008080;">77</span> <span style="color: #000000;">          <br /></span><span style="color: #008080;">78</span> <span style="color: #000000;">        ColorMatrix cm </span><span style="color: #000000;">=</span> <span style="color: #0000ff;">new</span><span style="color: #000000;"> ColorMatrix();  <br /></span><span style="color: #008080;">79</span>  <span style="color: #008000;">//</span><span style="color: #008000;">设置颜色矩阵  </span><span style="color: #008000;"><br /></span><span style="color: #008080;">80</span> <span style="color: #000000;">       cm.set(array);  <br /></span><span style="color: #008080;">81</span> <span style="color: #008000;">//</span><span style="color: #008000;">颜色滤镜，将颜色矩阵应用于图片  </span><span style="color: #008000;"><br /></span><span style="color: #008080;">82</span> <span style="color: #000000;">        paint.setColorFilter(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> ColorMatrixColorFilter(cm));  <br /></span><span style="color: #008080;">83</span> <span style="color: #008000;">//</span><span style="color: #008000;">绘图  </span><span style="color: #008000;"><br /></span><span style="color: #008080;">84</span> <span style="color: #000000;">        canvas.drawBitmap(mBitmap, </span><span style="color: #000000;">0</span><span style="color: #000000;">, </span><span style="color: #000000;">0</span><span style="color: #000000;">, paint);  <br /></span><span style="color: #008080;">85</span> <span style="color: #000000;">        Log.i(</span><span style="color: #000000;">"</span><span style="color: #000000;">CMatrix</span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">"</span><span style="color: #000000;">---------&gt;onDraw</span><span style="color: #000000;">"</span><span style="color: #000000;">);  <br /></span><span style="color: #008080;">86</span> <span style="color: #000000;">   <br /></span><span style="color: #008080;">87</span> <span style="color: #000000;">         <br /></span><span style="color: #008080;">88</span> <span style="color: #000000;">    }  <br /></span><span style="color: #008080;">89</span> <span style="color: #000000;">     <br /></span><span style="color: #008080;">90</span> <span style="color: #000000;">}  </span></div> <div><span style="color: #000000;"><br /></span></div> <div><span style="color: #000000;"><br /></span></div> </div> <p><span style="font-family: arial, helvetica, sans-serif;">CMatrix类主要负责 接收颜色矩阵的设置和重绘，没有要说的。MyImage类中进行绘图工作，首先设置颜色矩阵cm.set(..)从一维数组中读取数据20个数据给颜色矩 阵赋值，paint.setColorFilter(..)设置颜色滤镜，然后绘图，效果就出来了（这个过程和PS差不多）如下：</span><em><em><em><em><em><em><em><br /><br /><a id="url_6" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/12713818099NMQz4Nl.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_12713818099NMQz4Nl.png" border="0"  alt="" /></a><br /><a id="url_7" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271381825XJGiUUGn.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381825XJGiUUGn.png" border="0"  alt="" /></a><br /><a id="url_8" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271381842U0m4uTUx.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381842U0m4uTUx.png" border="0"  alt="" /></a><br /><a id="url_9" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/12713818647kb99802.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_12713818647kb99802.png" border="0"  alt="" /></a><br /></em></em></em></em></em></em></em><span style="font-family: arial, helvetica, sans-serif;">看到这里，相信大家对颜色矩阵的作用已经有了一个直观的感受，现在也可以尝试做一个照片特效的软件。</span></p> <p><span style="font-family: arial, helvetica, sans-serif;">但是各种效果并不能让用户手动调节颜色矩阵，这里需要计算公式，由于本人并不是做图形软件的也不能提供，可以参考这个链接：</span><br /><span style="font-family: arial, helvetica, sans-serif;"><a id="url_10" href="http://www.adobe.com/devnet/flash/articles/matrix_transformations/ColorMatrixDemo.swf" target="_blank">http://www.adobe.com/devnet/flash/articles/matrix_transformations/ColorMatrixDemo.swf</a></span></p> <p><br /><span style="font-family: arial, helvetica, sans-serif;"><strong>坐标变换矩阵</strong></span><br /><span style="font-family: arial, helvetica, sans-serif;">坐标变换矩阵是一个3*3的矩阵如图2.1，用来对图形进行坐标变化，将原来的坐标点转移到新的坐标点，</span></p> <p><span style="font-family: arial, helvetica, sans-serif;">因为一个图片是有点阵和每一点上的颜色信息组成的，所以对坐标的变换，就是对每一点进行搬移形成新的图片。</span></p> <p><span style="font-family: arial, helvetica, sans-serif;">具体的说图形的放大缩小，移动，旋转，透视，扭曲这些效果都可以用此矩阵来完成。</span><em><em><em><em><em><em><em><br /><br /><a id="url_11" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271381907wVeuzTD2.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381907wVeuzTD2.png" border="0"  alt="" /></a><br /></em></em></em></em></em></em></em><span style="font-family: arial, helvetica, sans-serif;">这个矩阵的作用是对坐标x,y进行变换计算结果如下：</span><br /><span style="font-family: arial, helvetica, sans-serif;">x'=a*x+b*y+c</span><br /><span style="font-family: arial, helvetica, sans-serif;">y'=d*x+e*y+f</span><br /><span style="font-family: arial, helvetica, sans-serif;">通常情况下g=h=0,这样使1=0*x+0*y+1恒成立。和颜色矩阵一样，坐标变换矩阵真正使用的参数很少也很有规律。</span><em><em><em><em><em><em><em><br /><br /><a id="url_12" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271381929fvyejlxl.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381929fvyejlxl.png" border="0"  alt="" /></a><br /></em></em></em></em></em></em></em><span style="font-family: arial, helvetica, sans-serif;">上图就是一个坐标变换矩阵的简单例子，计算后发现x'=x+50,y'=y+50.</span></p> <p><span style="font-family: arial, helvetica, sans-serif;">可见图片的每一点都在x和y方向上平移到了（50，50）点处，这种效果就是平移效果，将图片转移到了（50，50）处。</span><em><em><em><em><em><em><em><br /><a id="url_13" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271381954eNEbYoEI.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381954eNEbYoEI.png" border="0"  alt="" /></a><br /></em></em></em></em></em></em></em><span style="font-family: arial, helvetica, sans-serif;">计算上面得矩阵x'=2*x,y&#8216;=2*y.经过颜色矩阵和上面转移效果学习，相信读者可以明白这个矩阵的作用了，这个矩阵对图片进行了放大，具体的说是放大了二倍。</span><br /><span style="font-family: arial, helvetica, sans-serif;">下面将介绍几种常用的变换矩阵：</span><br /><span style="font-family: arial, helvetica, sans-serif;">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 旋转</span><em><em><em><em><em><em><em><br /><a id="url_14" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271381984t6X7xcj1.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271381984t6X7xcj1.png" border="0"  alt="" /></a></em></em></em></em></em></em></em></p> <p><em><em><em><em><em><em><em><br /></em></em></em></em></em></em></em><span style="font-family: arial, helvetica, sans-serif;">绕原点逆时针旋转&#952;度角的变换公式是 x' = xcos&#952; &#8722; ysin&#952; 与 y。' = xsin&#952; +&nbsp;&nbsp;&nbsp; ycos&#952;</span><br /><span style="font-family: arial, helvetica, sans-serif;">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缩放</span><em><em><em><em><em><em><em><br /><a id="url_15" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271382016TeOFkZ5i.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271382016TeOFkZ5i.png" border="0"  alt="" /></a></em></em></em></em></em></em></em></p> <p><br />变换后长宽分别放大x'=scale*x;y'=scale*y.<br />3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 切变<br /><a id="url_16" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271382046nPrSJD3C.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271382046nPrSJD3C.png" border="0"  alt="" /></a></p> <p><br />4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 反射<br /><a id="url_17" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271382180iZqxVK85.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271382180iZqxVK85.png" border="0"  alt="" /></a><br />( , )单位向量<br />5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 正投影<br /><a id="url_18" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/12713822147vGAWixg.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_12713822147vGAWixg.png" border="0"  alt="" /></a><br />( , )单位向量<br />&nbsp;<br />上面的各种效果也可以叠加在一起，既矩阵的组合变换，可以用矩阵乘法实现之，如：R=B(A*C)=(B*A)C,注意一点就是B*A和A*B一般是不等的。</p> <p>下面将编一个小程序，通过控制坐标变换矩阵来达到控制图形的目的，JavaCode如下：<br /><br />复制到剪贴板&nbsp;&nbsp;Java代码</p> <div> <div><span style="color: #008080;"> 1</span></div> </div> <div> <div><span style="color: #000000;">CooMatrix类：  <br /></span><span style="color: #008080;"> 2</span><span style="color: #000000;">   <br /></span><span style="color: #008080;"> 3</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> CooMatrix </span><span style="color: #0000ff;">extends</span><span style="color: #000000;"> Activity {  <br /></span><span style="color: #008080;"> 4</span><span style="color: #000000;">      <br /></span><span style="color: #008080;"> 5</span> <span style="color: #0000ff;">private</span><span style="color: #000000;"> Button change;  <br /></span><span style="color: #008080;"> 6</span> <span style="color: #0000ff;">private</span><span style="color: #000000;"> EditText [] et</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> EditText[</span><span style="color: #000000;">9</span><span style="color: #000000;">];  <br /></span><span style="color: #008080;"> 7</span> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">float</span><span style="color: #000000;"> []carray</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span> <span style="color: #0000ff;">float</span><span style="color: #000000;">[</span><span style="color: #000000;">9</span><span style="color: #000000;">];  <br /></span><span style="color: #008080;"> 8</span> <span style="color: #0000ff;">private</span><span style="color: #000000;"> MyImage sv;  <br /></span><span style="color: #008080;"> 9</span> <span style="color: #008000;">/**</span><span style="color: #008000;"> Called when the activity is first created. </span><span style="color: #008000;">*/</span><span style="color: #000000;">  <br /></span><span style="color: #008080;">10</span><span style="color: #000000;">    @Override  <br /></span><span style="color: #008080;">11</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onCreate(Bundle savedInstanceState) {  <br /></span><span style="color: #008080;">12</span> <span style="color: #0000ff;">super</span><span style="color: #000000;">.onCreate(savedInstanceState);  <br /></span><span style="color: #008080;">13</span><span style="color: #000000;">        setContentView(R.layout.main);  <br /></span><span style="color: #008080;">14</span><span style="color: #000000;">          <br /></span><span style="color: #008080;">15</span><span style="color: #000000;">       change</span><span style="color: #000000;">=</span><span style="color: #000000;">(Button)findViewById(R.id.set);  <br /></span><span style="color: #008080;">16</span><span style="color: #000000;">       sv</span><span style="color: #000000;">=</span><span style="color: #000000;">(MyImage)findViewById(R.id.MyImage);  <br /></span><span style="color: #008080;">17</span><span style="color: #000000;">        <br /></span><span style="color: #008080;">18</span> <span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">9</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){  <br /></span><span style="color: #008080;">19</span><span style="color: #000000;">            <br /></span><span style="color: #008080;">20</span><span style="color: #000000;">       et[i]</span><span style="color: #000000;">=</span><span style="color: #000000;">(EditText)findViewById(R.id.indexa</span><span style="color: #000000;">+</span><span style="color: #000000;">i);  <br /></span><span style="color: #008080;">21</span><span style="color: #000000;">       carray[i]</span><span style="color: #000000;">=</span><span style="color: #000000;">Float.valueOf(et[i].getText().toString());  <br /></span><span style="color: #008080;">22</span><span style="color: #000000;">         <br /></span><span style="color: #008080;">23</span><span style="color: #000000;">       }  <br /></span><span style="color: #008080;">24</span><span style="color: #000000;">          <br /></span><span style="color: #008080;">25</span><span style="color: #000000;">      change.setOnClickListener(l);  <br /></span><span style="color: #008080;">26</span><span style="color: #000000;">          <br /></span><span style="color: #008080;">27</span><span style="color: #000000;">        <br /></span><span style="color: #008080;">28</span><span style="color: #000000;">    }  <br /></span><span style="color: #008080;">29</span><span style="color: #000000;">      <br /></span><span style="color: #008080;">30</span> <span style="color: #0000ff;">private</span><span style="color: #000000;"> Button.OnClickListener l</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Button.OnClickListener(){  <br /></span><span style="color: #008080;">31</span><span style="color: #000000;">   <br /></span><span style="color: #008080;">32</span><span style="color: #000000;">       @Override  <br /></span><span style="color: #008080;">33</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onClick(View arg0) {  <br /></span><span style="color: #008080;">34</span> <span style="color: #008000;">//</span><span style="color: #008000;"> TODO Auto-generated method stub  </span><span style="color: #008000;"><br /></span><span style="color: #008080;">35</span><span style="color: #000000;">           getValues();  <br /></span><span style="color: #008080;">36</span><span style="color: #000000;">           sv.setValues(carray);  <br /></span><span style="color: #008080;">37</span><span style="color: #000000;">           sv.invalidate();  <br /></span><span style="color: #008080;">38</span><span style="color: #000000;">       }  <br /></span><span style="color: #008080;">39</span><span style="color: #000000;">          <br /></span><span style="color: #008080;">40</span><span style="color: #000000;">    };  <br /></span><span style="color: #008080;">41</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> getValues(){  <br /></span><span style="color: #008080;">42</span> <span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">9</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){  <br /></span><span style="color: #008080;">43</span><span style="color: #000000;">              <br /></span><span style="color: #008080;">44</span><span style="color: #000000;">            carray[i]</span><span style="color: #000000;">=</span><span style="color: #000000;">Float.valueOf(et[i].getText().toString());  <br /></span><span style="color: #008080;">45</span><span style="color: #000000;">        }  <br /></span><span style="color: #008080;">46</span><span style="color: #000000;">          <br /></span><span style="color: #008080;">47</span><span style="color: #000000;">    }  <br /></span><span style="color: #008080;">48</span><span style="color: #000000;">   <br /></span><span style="color: #008080;">49</span><span style="color: #000000;">      <br /></span><span style="color: #008080;">50</span><span style="color: #000000;">}  <br /></span><span style="color: #008080;">51</span><span style="color: #000000;">MyImage类继承自View类：  <br /></span><span style="color: #008080;">52</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> MyImage </span><span style="color: #0000ff;">extends</span><span style="color: #000000;"> View {  <br /></span><span style="color: #008080;">53</span> <span style="color: #0000ff;">private</span><span style="color: #000000;"> Paint mPaint </span><span style="color: #000000;">=</span> <span style="color: #0000ff;">new</span><span style="color: #000000;"> Paint(Paint.ANTI_ALIAS_FLAG);  <br /></span><span style="color: #008080;">54</span> <span style="color: #0000ff;">private</span><span style="color: #000000;"> Bitmap mBitmap;  <br /></span><span style="color: #008080;">55</span> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">float</span><span style="color: #000000;"> [] array</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span> <span style="color: #0000ff;">float</span><span style="color: #000000;">[</span><span style="color: #000000;">9</span><span style="color: #000000;">];  <br /></span><span style="color: #008080;">56</span><span style="color: #000000;">      <br /></span><span style="color: #008080;">57</span><span style="color: #000000;">      <br /></span><span style="color: #008080;">58</span><span style="color: #000000;">      <br /></span><span style="color: #008080;">59</span> <span style="color: #0000ff;">public</span><span style="color: #000000;"> MyImage(Context context,AttributeSet attrs) {  <br /></span><span style="color: #008080;">60</span> <span style="color: #0000ff;">super</span><span style="color: #000000;">(context,attrs);  <br /></span><span style="color: #008080;">61</span><span style="color: #000000;">          <br /></span><span style="color: #008080;">62</span><span style="color: #000000;">        mBitmap </span><span style="color: #000000;">=</span><span style="color: #000000;"> BitmapFactory.decodeResource(context.getResources(),  <br /></span><span style="color: #008080;">63</span><span style="color: #000000;">                                               R.drawable.ic_launcher_android);  <br /></span><span style="color: #008080;">64</span><span style="color: #000000;">        invalidate();  <br /></span><span style="color: #008080;">65</span><span style="color: #000000;">    }  <br /></span><span style="color: #008080;">66</span><span style="color: #000000;">     <br /></span><span style="color: #008080;">67</span><span style="color: #000000;">      <br /></span><span style="color: #008080;">68</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setValues(</span><span style="color: #0000ff;">float</span><span style="color: #000000;"> [] a){  <br /></span><span style="color: #008080;">69</span> <span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">9</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){  <br /></span><span style="color: #008080;">70</span><span style="color: #000000;">           array[i]</span><span style="color: #000000;">=</span><span style="color: #000000;">a[i];  <br /></span><span style="color: #008080;">71</span><span style="color: #000000;">        }  <br /></span><span style="color: #008080;">72</span><span style="color: #000000;">          <br /></span><span style="color: #008080;">73</span><span style="color: #000000;">    }  <br /></span><span style="color: #008080;">74</span><span style="color: #000000;">      <br /></span><span style="color: #008080;">75</span><span style="color: #000000;">    @Override </span><span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> onDraw(Canvas canvas) {  <br /></span><span style="color: #008080;">76</span><span style="color: #000000;">        Paint paint </span><span style="color: #000000;">=</span><span style="color: #000000;"> mPaint;  <br /></span><span style="color: #008080;">77</span><span style="color: #000000;">        canvas.drawBitmap(mBitmap, </span><span style="color: #000000;">0</span><span style="color: #000000;">, </span><span style="color: #000000;">0</span><span style="color: #000000;">, paint);  <br /></span><span style="color: #008080;">78</span> <span style="color: #008000;">//</span><span style="color: #008000;">new 一个坐标变换矩阵  </span><span style="color: #008000;"><br /></span><span style="color: #008080;">79</span><span style="color: #000000;">        Matrix cm </span><span style="color: #000000;">=</span> <span style="color: #0000ff;">new</span><span style="color: #000000;"> Matrix();  <br /></span><span style="color: #008080;">80</span><span style="color: #008000;">//</span><span style="color: #008000;">为坐标变换矩阵设置响应的值  </span><span style="color: #008000;"><br /></span><span style="color: #008080;">81</span><span style="color: #000000;">       cm.setValues(array);  <br /></span><span style="color: #008080;">82</span><span style="color: #008000;">//</span><span style="color: #008000;">按照坐标变换矩阵的描述绘图  </span><span style="color: #008000;"><br /></span><span style="color: #008080;">83</span><span style="color: #000000;">        canvas.drawBitmap(mBitmap, cm, paint);  <br /></span><span style="color: #008080;">84</span><span style="color: #000000;">        Log.i(</span><span style="color: #000000;">"</span><span style="color: #000000;">CMatrix</span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">"</span><span style="color: #000000;">---------&gt;onDraw</span><span style="color: #000000;">"</span><span style="color: #000000;">);  <br /></span><span style="color: #008080;">85</span><span style="color: #000000;">   <br /></span><span style="color: #008080;">86</span><span style="color: #000000;">         <br /></span><span style="color: #008080;">87</span><span style="color: #000000;">    }  <br /></span><span style="color: #008080;">88</span><span style="color: #000000;">     <br /></span><span style="color: #008080;">89</span></div> </div> <div> <div><span style="color: #000000;">}  </span></div> </div> <p><em><em><em><em><em><em><em><em><em><em><em><em><em><em><br /></em></em></em></em></em></em></em></em></em></em></em></em></em></em><br /><span style="font-family: arial, helvetica, sans-serif;">上面的代码中类CooMatrix用于接收用户输入的坐标变换矩阵参数，类MyImage接收参数，通过setValues()设置矩阵参数，然后Canvas调用drawBitmap绘图。效果如下：</span></p> <p><em><em><em><em><em><em><em><em><em><em><em><em><em><em><br /><a id="url_19" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271382361vPYddmGF.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271382361vPYddmGF.png" border="0"  alt="" /></a><br /><a id="url_20" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/12713823723z3c370V.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_12713823723z3c370V.png" border="0"  alt="" /></a><br /><a id="url_21" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271382385uV1mf9rz.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271382385uV1mf9rz.png" border="0"  alt="" /></a><br /></em></em></em></em></em></em></em></em></em></em></em></em></em></em><span style="font-family: arial, helvetica, sans-serif;">上面给出了用坐标变换矩阵做出的各种效果，用坐标变换矩阵可以方面的调节图形的各种效果，</span></p> <p><span style="font-family: arial, helvetica, sans-serif;">但是我们看看Matrix类就可以发现，实际上，matrix类本身已经提供了许多类似的方法，我们只要调用，就可以了。</span><br />&nbsp;<br /><span style="font-family: arial, helvetica, sans-serif;">setScale(float sx, float sy, float px, float py) 放大&nbsp;</span><br /><span style="font-family: arial, helvetica, sans-serif;">setSkew(float kx, float ky, float px, float py) 斜切&nbsp;</span><br /><span style="font-family: arial, helvetica, sans-serif;">setTranslate(float dx, float dy)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 平移&nbsp;</span><br /><span style="font-family: arial, helvetica, sans-serif;">setRotate(float degrees, float px, float py)&nbsp;&nbsp;&nbsp; 旋转&nbsp;</span><br />&nbsp;<br /><span style="font-family: arial, helvetica, sans-serif;">上面的函数提供了基本的变换平移，放大，旋转，斜切。为了做出更复杂的变换，同时不必亲手去改动坐标变换矩阵，</span></p> <p><span style="font-family: arial, helvetica, sans-serif;">Matrix类提供了许多Map方法，将原图形映射到目标点构成新的图形，</span></p> <p><span style="font-family: arial, helvetica, sans-serif;">下面简述setPolyToPoly(float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount) 的用法，希望起到举一反三的作用。</span></p> <p><span style="font-family: arial, helvetica, sans-serif;">参数src和dst是分别存储了原图像的点和和指定的目标点的一维数组，数组中存储的坐标格式如下：</span><br /><span style="font-family: arial, helvetica, sans-serif;">&nbsp;[x0, y0, x1, y1, x2,y2,...]</span><br />&nbsp;<br /><span style="font-family: arial, helvetica, sans-serif;">这个个函数将src中的坐标映射到dst中的坐标，实现图像的变换。</span></p> <p><span style="font-family: arial, helvetica, sans-serif;">具体的例子可以参考APIDemos里的PolyToPoly，我在这里就不再贴代码了，只讲一下函数是怎么变换图片的。下面是效果：</span><br /><em><em><em><em><em><em><em><em><em><em><em><em><em><em><br /><a id="url_22" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/127138243999fcMBcL.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_127138243999fcMBcL.png" border="0"  alt="" /></a><br /></em></em></em></em></em></em></em></em></em></em></em></em></em></em><span style="font-family: arial, helvetica, sans-serif;">图中写1的是原图，写有2，3，4的是变换后的图形。现在分析2是怎么变换来的，变换的原坐标点和目的坐标点如下：</span><br /><span style="font-family: arial, helvetica, sans-serif;">src=new float[] { 32, 32, 64, 32 }</span><br /><span style="font-family: arial, helvetica, sans-serif;">dst=new float[] { 32, 32, 64, 48 }</span><em><em><em><em><em><em><em><em><em><em><em><em><em><em><br /><a id="url_23" href="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/1271382482XgYceLnf.png" target="_blank"><img src="http://dev.chinamobile.com/cmdn/wiki/uploads/201004/s_1271382482XgYceLnf.png" border="0"  alt="" /></a><br /></em></em></em></em></em></em></em></em></em></em></em></em></em></em><span style="font-family: arial, helvetica, sans-serif;">从 上图标示出的坐标看出原图的（32，32）映射到原图的（32，32），（64，32）映射到原图（64，48）这样的效果是图像放大了而且发生了旋转。 这样的过程相当于（32，32）点不动，然后拉住图形（64，32）点并拉到（64，48）点处，这样图形必然会被拉伸放大并且发生旋转。最后用一个平移 将图形移动到右边现在的位置。希望能够好好理解这一过程，下面的3，4图是同样的道理。</span></p></div></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/359537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2011-09-26 14:58 <a href="http://www.blogjava.net/wangxinsh55/archive/2011/09/26/359537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>android酷炫翻页效果+图形分析</title><link>http://www.blogjava.net/wangxinsh55/archive/2011/09/21/359146.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Wed, 21 Sep 2011 03:59:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2011/09/21/359146.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/359146.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2011/09/21/359146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/359146.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/359146.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->package&nbsp;sf.hmg.turntest;import&nbsp;android.content.Context;import&nbsp;android.graphics.Bitmap;i...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangxinsh55/archive/2011/09/21/359146.html'>阅读全文</a><img src ="http://www.blogjava.net/wangxinsh55/aggbug/359146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2011-09-21 11:59 <a href="http://www.blogjava.net/wangxinsh55/archive/2011/09/21/359146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>矩阵的学习</title><link>http://www.blogjava.net/wangxinsh55/archive/2011/09/20/359081.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Tue, 20 Sep 2011 08:36:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2011/09/20/359081.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/359081.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2011/09/20/359081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/359081.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/359081.html</trackback:ping><description><![CDATA[<div>http://www.moandroid.com/?page_id=1176</div><div><h2>Matrix学习（未完）</h2> <ul><li><a title="Matrix学习&#8212;&#8212;基础知识" href="http://www.moandroid.com/?p=1771" target="_blank">基础知识</a></li><li><a title="Matrix学习&#8212;&#8212;如何使用Matrix" href="http://www.moandroid.com/?p=1781" target="_blank">如何使用Matrix</a></li><li><a title="Matrix学习&#8212;&#8212;图像的复合变化" href="http://www.moandroid.com/?p=1805" target="_blank">图像的复合变化</a></li><li><a title="Matrix学习&#8212;&#8212;Preconcats or Postconcats? " href="http://www.moandroid.com/?p=1813" target="_blank">Preconcats matrix or Postconcats matrix?</a></li><li><a title="Matrix学习&#8212;&#8212;错切变换" href="http://www.moandroid.com/?p=1824" target="_blank">错切变换</a><img title="icon_new" src="http://www.moandroid.com/wp-content/uploads/2009/10/icon_new.gif" alt="icon_new" height="10" width="27" /></li><li><a title="对称变换（反射）" href="http://www.moandroid.com/?p=1834" target="_blank">对称变换（反射）</a><img title="icon_new" src="http://www.moandroid.com/wp-content/uploads/2009/10/icon_new.gif" alt="icon_new" height="10" width="27" /></li></ul></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/359081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2011-09-20 16:36 <a href="http://www.blogjava.net/wangxinsh55/archive/2011/09/20/359081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过ADB向android SD卡传送文件</title><link>http://www.blogjava.net/wangxinsh55/archive/2011/09/20/359046.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Tue, 20 Sep 2011 01:56:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2011/09/20/359046.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/359046.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2011/09/20/359046.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/359046.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/359046.html</trackback:ping><description><![CDATA[<div><span style="color: #333333; font-family: Georgia, 'Times New Roman', Times, san-serif; line-height: 25px; "><div><span style="font-size: large;"><span style="background-color: #ffffff;">1. 创建SD卡并挂载到模拟器</span></span></div><div><span style="background-color: #ffffff;">运 行cmd，并cd至android-sdk\tools\目录下。输入如下命令则可创建并挂载SD卡到模拟器上。mksdcard的参数中SD卡的大小单 位可以为K或者M(必须为大写)，他会在tools目录创建一个文件叫sdcard.img。通过在emulator后添加-sdcard即可挂载SD卡 并启动模拟器。</span></div><div><span style="background-color: #ffffff;">mksdcard 256M sdcard.img</span></div><div><span style="background-color: #ffffff;">emulator -avd 2.2 -sdcard sdcard.img</span></div><div><span style="background-color: #ffffff;">2. 操作单个文件</span></div><div><span style="background-color: #ffffff;">通过adb push，则可将文件添加到SD卡中。如果想在push的时候修改文件名称的话，只需要修改push的第二个参数改成完整路径（目录+文件名），如/sdcard/test-0.jpg。重启模拟器，则可以在见到SD卡中新添加的内容了。</span></div><div><span style="background-color: #ffffff;"><br /></span></div><div><span style="background-color: #ffffff;">adb push E:/images/test.jpg /sdcard/</span></div><div><span style="background-color: #ffffff;">adb push E:/images/test.jpg /sdcard/test-0.jpg</span></div><div><span style="background-color: #ffffff;">而要将test.jpg提取出来的话，可使用adb pull命令。第二个参数为本机硬盘地址，如果不想改名的话，只需要输入目录地址（不能加\)，而需要改名的话，输入文件的完整路径就行了。</span></div><div><span style="background-color: #ffffff;">adb pull /sdcard/images/test.jpg E:\tmp</span></div><div><span style="background-color: #ffffff;">adb pull /sdcard/images/test.jpg E:\tmp\test-0.jpg</span></div><div><span style="background-color: #ffffff;">3. 操作整个文件夹</span></div><div><span style="background-color: #ffffff;">要将硬盘上的一个文件夹的所有内容都添加至SD卡的话，可以通过如下命令（注意pic后面不能有\）：</span></div><div><span style="background-color: #ffffff;">adb push E:\Android\pic /sdcard/images/</span></div><div><span style="background-color: #ffffff;">该命令会把pic文件下以及其子文件夹的内容全部添加到SD卡的images目录下。如果SD卡下没有images目录的话，可以先通过adb shell进行创建，如下：</span></div><div><span style="background-color: #ffffff;">adb shell</span></div><div><span style="background-color: #ffffff;">cd /sdcard</span></div><div><span style="background-color: #ffffff;">mkdir images</span></div><div><span style="background-color: #ffffff;">exit</span></div><div><span style="background-color: #ffffff;">而导出整个文件夹的话，可以通过如下命令：</span></div><div><span style="background-color: #ffffff;">adb pull /sdcard/images/ E:\tmp</span></div></span></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/359046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2011-09-20 09:56 <a href="http://www.blogjava.net/wangxinsh55/archive/2011/09/20/359046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>