1. 程式人生 > >Android影象處理之Canvas

Android影象處理之Canvas

Canvas的相關函式

clip打頭的函式表示對canvas裁剪成指定的形狀

void clipPath(Path path)

void clipPath(Path path,Region.op op)

void clipRect(RectF rect,Region.op op)

void clipRect(Rect rect,Region.op op)

void clipRect(int left,int top,int right,int bottom)

void clipRect(float left,float top,float right,float bottom)

void clipRect(RectF rect)

void clipRect(float left,float top,float right,float bottom,Region.op op)

void clipRect(Rect rect)

void clipRegion(Region region)

void clipRegion(Region region,Region.op op)

void concat(Matrix matrix):對canvas進行matrix變換(前乘),變換不可逆

void drawRGB(int red,int green,int blue):對canvas上的bitmap著色

void drawArc(RectF oval,float startAngle,float sweepAngle,boolean useCenter,Paint paint)

畫弧,該弧由oval,startAngle,sweepAngle決定,useCenter的作用以下程式碼和對應的圖作說明

        Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);
        canvas.drawArc(100,100,300,500,0,150,true,paint);

        Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);
        canvas.drawArc(100,100,300,500,0,150,false,paint);

void drawBitmap(Bitmap source,Rect src,Rect dst,Paint paint)

:將source用src進行裁剪,dst決定了source在canvas上的大小和位置

void drawBitmap(Bitmap source,int left ,int top,Paint paint):將source畫到canvas上,不縮放也不裁剪,位置由left,top決定

void drawBitmao(Bitmap source,Rect src,RectF dst,Paint paint):

void drawBitmap(Bitmap source,Matrix matrix Paint paint):對source進行matrix變換再畫到canvas上,注意從(0,0)開始畫

void drawCircle(float dx,float dy,Paint paint)

void drawColor(int color):給bitmap上色

void drawColor(int color,PorterDuff.Mode mode):給bitmap上色,並採用mode的覆蓋模式

void drawLine(float startx,float starty,float endx,float endy,Paint paint)

void drawLines(float[] opts,Paint):畫多條線,opt每4個值表示一條線,多餘的忽略

void drawLines(float[] opts,int offset,int count,Paint paint):offset表示opts的起始索引,count考慮的opts中值的總數

void drawOval(RectF oval,Paint):畫橢圓

void drawPath(Path path,Paint,paint)

drawPoint(float[] opts,Piant):

drawPosText(String text,float[] opts,Paint paint):將text寫在opts指定的位置上

drawPosText(String text,int start,int count,float[] opts,Paint  paint)

drawARBG(int a,int r,int b,int g)

三種畫矩形的方式
void drawRect(float left,float top,float right,float bottom,Paint paint)

void drawRect(RectF rect,Paint paint)

void drawRect(Rect rect,Paint paint)

void drawRoundRect(RectF rect,float rx,float ry,Piant paint):畫圓角矩形,rect確定矩形,rx,ry確定半徑

三種寫文字的方式

void drawText(String text,float x,float y,Paint paint):以x,y為起點將text寫到bitmap上

void drawText(String text,int start,int end,float x,float y,Paint paint)

void drawText(String text,int start,int count,float x,float y)

void drawTextOnPath(String text,Path path,float hOffset,float vOffSet,Paint):將text畫在指定path上,hOffset:文字沿path與起始點偏移的距離,v沿中心偏移的距離

void drawTextOnPath(String text,int start,int count,Path path,float hOffset,float vOffset,Paint paint)

Rect getClipBounds():返回該canvas的矩形邊界

int getHeight():與canvas繫結的bitmap的高度

int getWidth():與canvas繫結的bitmap的寬


Canvas的平移、縮放、旋轉、傾斜等操作

void rotate(float degree):將canvas以(0,0)為圓心旋轉degree

void rotate(float degree,float dx,float dy):將canvas以(dx,dy)旋轉degree

void scale(float sx,float sy)

void scale(float sx,float sy,float px,float py):px,py為縮放中心

void skew(float sx,float sy)

void translate(float dx,float sy)
注意canvas的平移、縮放、旋轉、傾斜、clip等操作都是不可逆的

Canvas的儲存與恢復:

void save():將當前的變換矩陣和裁剪狀態壓入棧中

void restore():從棧中取出棧頂的畫布,並按照棧頂的畫布恢復當前畫布。
關於canvas的儲存與恢復請參考Canvas的變換操作