Android影像處理技術(實現Android中的PS)(五),影像處理android
好快,今天已經是關於Android圖片處理技術的第五個部落格了,有點多了,主要是為了照顧一下基礎比較薄弱的同學。不過我們都是用一個連貫的例子來講解的,並且提供了帶有詳細注釋的Demo,通過前四個博文的學習,想必大家對圖片處理技術有所瞭解了,從本博文開始,只貼出關鍵程式碼片段,其他無關緊要的代碼(比如xml布局檔案)就不貼了,我會附上一個Demo,大家可以下載參考。(PS:收取一個積分值是希望大家能珍惜下載的代碼,畢竟是我一行一行寫的,也算是對我自己工作的尊重吧,還請大家見諒。。。)
好了,廢話不多說,開始我們今天的講解:使用畫筆風格Xfermode和Shader實現對圖片的處理。
首先,效果展示:
首先我們先介紹一下Xfermode:
然後再介紹一下Shader:
下面我們來貼出使用Xfermode改變圖片的主要代碼:
自訂XfermodeView:
public class XfermodesView extends View{ private Bitmap mBitmap,mOutBitmap; private Paint mPaint; public XfermodesView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } private void initView(){ //關掉硬體加速,否則達不到預期的效果; setLayerType(LAYER_TYPE_SOFTWARE, null); //從資源中載入圖片 mBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.a); mOutBitmap=Bitmap.createBitmap(mBitmap.getWidth(),mBitmap.getHeight(),Config.ARGB_8888);//Config.ARGB_8888 防鋸齒 Canvas canvas=new Canvas(mOutBitmap); mPaint=new Paint(Paint.ANTI_ALIAS_FLAG); //Dst //這些都很簡單的了。。 canvas.drawRoundRect(new RectF(50, 50, mBitmap.getWidth(), mBitmap.getHeight()), 50, 50, mPaint); //Src //設定模式: mPaint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(mBitmap, 0,0, mPaint); //還原mPaint mPaint.setXfermode(null); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(mOutBitmap,0,0,null); }}
我想,如果看過前幾個博文,這個代碼沒什麼難度。
然後再看看怎樣自訂ShaderView:
public class BitmapShaderView extends View { private Bitmap mBitmap; private Paint mPaint; private BitmapShader mShader; public BitmapShaderView(Context context, AttributeSet attrs) { super(context, attrs); mPaint=new Paint(); mBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.a); //設定Shader模式: mShader=new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); //將設定好的shader綁定到畫筆mPaint上面 mPaint.setShader(mShader); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(200, 200, 50, mPaint); }}
ok,結束。
最後,Demo地址:http://download.csdn.net/detail/nsgsbs/8538579