Android ApiDemo分析(九)--Graphics
阿新 • • 發佈:2018-12-23
這個Demo演示了對圖片的一些操作以及基本的繪圖方式;
相關內容:
在Android要繪製一個東西,需要四個部分:一個Bitmap用於儲存畫素值,一個Canvas用於定義繪圖操作,一個Paint定義繪圖使用的顏色,畫筆,畫刷等屬性,最後一個是要繪製的圖形本身(如矩形,線段等)。
1、Bitmap - 稱作點陣圖,一般點陣圖的檔案格式字尾為bmp,作為一種逐畫素的顯示物件執行效率高,但是缺點也很明視訊記憶體儲效率低。程式中表示為一種儲存物件。
1)createBitmap (int width, int height, Bitmap.Config config)
建立一個Bitmap,設定寬度、高度及儲存方式。 Bitmap.Config用於設定點陣圖的儲存方式,主要是儲存的精度不同。
2)extractAlpha() 提取Alpha通道,用於返回一個bitmap,該bitmap的alpha值為呼叫者的alpha值。
2、Drawable - 作為Android平臺下通用的圖形物件,它可以裝載常用格式的影象,比如GIF、PNG、JPG,當然也支援BMP,當然還提供一些高階的視覺化物件,比如漸變、圖形等。
3、Canvas - 名為畫布,我們可以看作是一種處理過程,使用各種方法來管理Bitmap、GL或者Path路徑,同時它可以配合Matrix矩陣類給影象做旋轉、縮放等操作,同時Canvas類還提供了裁剪、選取等操作。
4、Paint - 我們可以把它看做一個畫圖工具,比如畫筆、畫刷。他管理了每個畫圖工具的字型、顏色、樣式。
1)setAntiAlias()設定是否抗鋸齒,即是否對圖形邊緣做平滑處理;
5、Shader-著色、渲染,主要用來對影象做顏色上的特殊處理,供Paint使用,mPaint.setShader();
Shader.TitleMode定義了3種平鋪模式。
1)CLAMP邊緣拉伸;2)MIRROR映象平鋪;3)REPEAT重複平鋪。
Shader子類
1)BitmapShader渲染一張bitmap
BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY)
tileX、tileY分別指定bitmap在X軸、Y軸上的平鋪模式。
2)SweepGradient順時針圓周掃描(雷達)式漸變,將指定的顏色圍繞中心點實現掃描式漸變。
SweepGradient(float cx, float cy, int[] colors, float[] positions)
cx,cy指定中心點座標,colors指定圍繞中心點分佈的顏色,至少包含兩種顏色。positions與colors對應,指定顏色之間的相對分佈,起始位置為0,結束位置為1,單調遞增,若position為null則平均分佈。
SweepGradient(float cx, float cy, int color0, int color1)只有兩種顏色的平均輻射。
3)RadialGradient放射式漸變
RadialGradient(float x, float y, float radius, int[] colors, float[] positions, Shader.TileMode tile)
x、y指定中心,radius指定半徑,colors指定分佈的顏色,position指定相對位置。
RadialGradient(float x, float y, float radius, int color0, int color1, Shader.TileMode tile)
只有兩種顏色的漸變。
4)LinearGradient 線性漸變,將顏色沿一條直線進行漸變
LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile)
x0,y0起點座標,x1、y1終點座標,其他引數與上面的相同。
LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)
只有兩種顏色的漸變。
5)ComposeShader混合渲染,用於將兩種shader混合;
ComposeShader(Shader shaderA, Shader shaderB, Xfermode mode)
shader1最下層shader,shader2最上層shader;xfermode疊加模式,如果為null則預設SRC_OVER ;
ComposeShader(Shader shaderA, Shader shaderB, PorterDuff.Mode mode)
指定為PorterDuff.Mode模式的混合。
6、Xfermode對圖形的重疊進行處理
AvoidXfermode 指定了一個顏色和容差,強制Paint避免在它上面繪圖(或者只在它上面繪圖)。
PixelXorXfermode 當覆蓋已有的顏色時,應用一個簡單的畫素XOR操作。
PorterDuffXfermode 這是一個非常強大的轉換模式,使用它,可以使用影象合成的16條Porter-Duff規則的任意一條來控制Paint如何與已有的Canvas影象進行互動。
相關內容:
在Android要繪製一個東西,需要四個部分:一個Bitmap用於儲存畫素值,一個Canvas用於定義繪圖操作,一個Paint定義繪圖使用的顏色,畫筆,畫刷等屬性,最後一個是要繪製的圖形本身(如矩形,線段等)。
1、Bitmap - 稱作點陣圖,一般點陣圖的檔案格式字尾為bmp,作為一種逐畫素的顯示物件執行效率高,但是缺點也很明視訊記憶體儲效率低。程式中表示為一種儲存物件。
1)createBitmap (int width, int height, Bitmap.Config config)
建立一個Bitmap,設定寬度、高度及儲存方式。 Bitmap.Config用於設定點陣圖的儲存方式,主要是儲存的精度不同。
2)extractAlpha() 提取Alpha通道,用於返回一個bitmap,該bitmap的alpha值為呼叫者的alpha值。
2、Drawable - 作為Android平臺下通用的圖形物件,它可以裝載常用格式的影象,比如GIF、PNG、JPG,當然也支援BMP,當然還提供一些高階的視覺化物件,比如漸變、圖形等。
3、Canvas - 名為畫布,我們可以看作是一種處理過程,使用各種方法來管理Bitmap、GL或者Path路徑,同時它可以配合Matrix矩陣類給影象做旋轉、縮放等操作,同時Canvas類還提供了裁剪、選取等操作。
4、Paint - 我們可以把它看做一個畫圖工具,比如畫筆、畫刷。他管理了每個畫圖工具的字型、顏色、樣式。
1)setAntiAlias()設定是否抗鋸齒,即是否對圖形邊緣做平滑處理;
5、Shader-著色、渲染,主要用來對影象做顏色上的特殊處理,供Paint使用,mPaint.setShader();
Shader.TitleMode定義了3種平鋪模式。
1)CLAMP邊緣拉伸;2)MIRROR映象平鋪;3)REPEAT重複平鋪。
Shader子類
1)BitmapShader渲染一張bitmap
BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY)
tileX、tileY分別指定bitmap在X軸、Y軸上的平鋪模式。
2)SweepGradient順時針圓周掃描(雷達)式漸變,將指定的顏色圍繞中心點實現掃描式漸變。
SweepGradient(float cx, float cy, int[] colors, float[] positions)
cx,cy指定中心點座標,colors指定圍繞中心點分佈的顏色,至少包含兩種顏色。positions與colors對應,指定顏色之間的相對分佈,起始位置為0,結束位置為1,單調遞增,若position為null則平均分佈。
SweepGradient(float cx, float cy, int color0, int color1)只有兩種顏色的平均輻射。
3)RadialGradient放射式漸變
RadialGradient(float x, float y, float radius, int[] colors, float[] positions, Shader.TileMode tile)
x、y指定中心,radius指定半徑,colors指定分佈的顏色,position指定相對位置。
RadialGradient(float x, float y, float radius, int color0, int color1, Shader.TileMode tile)
只有兩種顏色的漸變。
4)LinearGradient 線性漸變,將顏色沿一條直線進行漸變
LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile)
x0,y0起點座標,x1、y1終點座標,其他引數與上面的相同。
LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)
只有兩種顏色的漸變。
5)ComposeShader混合渲染,用於將兩種shader混合;
ComposeShader(Shader shaderA, Shader shaderB, Xfermode mode)
shader1最下層shader,shader2最上層shader;xfermode疊加模式,如果為null則預設SRC_OVER ;
ComposeShader(Shader shaderA, Shader shaderB, PorterDuff.Mode mode)
指定為PorterDuff.Mode模式的混合。
6、Xfermode對圖形的重疊進行處理
AvoidXfermode 指定了一個顏色和容差,強制Paint避免在它上面繪圖(或者只在它上面繪圖)。
PixelXorXfermode 當覆蓋已有的顏色時,應用一個簡單的畫素XOR操作。
PorterDuffXfermode 這是一個非常強大的轉換模式,使用它,可以使用影象合成的16條Porter-Duff規則的任意一條來控制Paint如何與已有的Canvas影象進行互動。